Skip to content

chore(release): backport #42388 and #41462 to stable/1.102.x - #42618

Merged
mateo-berri merged 4 commits into
stable/1.102.xfrom
litellm_backport_stable_1_102_x_realtime_otel
Sep 23, 2026
Merged

mateo-berri merged 4 commits into
stable/1.102.xfrom
litellm_backport_stable_1_102_x_realtime_otel

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

TLDR

Problem this solves:

  • stable/1.102.x closes realtime clients with 1006 and no event when the upstream handshake is refused
  • stable/1.102.x cannot promote nested caller metadata (requester_metadata.trace_id) to OTEL span attributes
  • the line's lock still carries anyio 4.13.0 and soupsieve 2.8.4

How it solves it:

User Flow

Before: a developer connecting to a realtime deployment whose Azure credential is rejected sees the socket vanish with no explanation, and a platform team cannot join the gateway's LLM span to their own trace

  1. They run wscat -c "wss://litellm-domain/v1/realtime?model=azure-realtime" -H "Authorization: Bearer sk-..."
  2. wscat prints Connected (press CTRL+C to quit)
  3. Nothing arrives, then wscat prints Disconnected (code: 1006, reason: "")
  4. Separately, the proxy admin sets callback_settings.otel.baggage_metadata_keys: [requester_metadata.trace_id] and the developer sends POST https://litellm-domain/v1/chat/completions with "metadata": {"trace_id": "abc"}
  5. The request returns 200, but the LLM-call span in their tracing backend has no litellm.metadata.trace_id attribute

After: the realtime client is told what the upstream said and the caller's trace id lands on the span

  1. They run wscat -c "wss://litellm-domain/v1/realtime?model=azure-realtime" -H "Authorization: Bearer sk-..."
  2. wscat prints Connected (press CTRL+C to quit)
  3. They receive {"type": "error", "error": {"type": "server_error", "message": "Upstream realtime handshake rejected with HTTP 401"}}, then wscat prints Disconnected (code: 1008, reason: "Upstream realtime handshake rejected with HTTP 401")
  4. The proxy admin sets the same baggage_metadata_keys and the developer sends the same POST https://litellm-domain/v1/chat/completions with "metadata": {"trace_id": "abc"}
  5. The request returns 200 and the same LLM-call span now carries litellm.metadata.trace_id=abc; non-allowlisted metadata stays off the span

Relevant issues

Backport of #42388 (customer report via Pylon #8933) and #41462 (customer request via Pylon #8571) to stable/1.102.x, plus the test-only follow-up #42624. All three are merged on main and reachable from origin/main. #42152 and #42288 from the original backport list are already on the line via #42538. The Jev passthrough backport stays on #42595

Affected release

Backport target stable/1.102.x, tip version 1.102.1 (not yet tagged or published, so no version bump in this PR)

Linear ticket

Resolves LIT-7058, LIT-7760

Pre-Submission checklist

Please complete all items before asking a LiteLLM maintainer to review your PR

  • I have added meaningful tests
  • The handful of test files covering my change pass locally, e.g. uv run pytest tests/test_litellm/<your_test_file>.py -v. Leave the suites (make test-unit-*, make test-unit) to CI: it finishes in ~15 minutes where a laptop takes an hour or more
  • My PR passes all required CI/CD checks (e.g., lint, schema.d.ts sync check, etc.)
  • My PR's scope is as isolated as possible; it only solves 1 specific problem
  • I have received a Greptile Confidence Score of at least 4/5 before requesting a maintainer review (Greptile reviews automatically once the PR is opened; only comment @greptileai to re-request a review after pushing changes)

Delays in PR merge?

If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).

Screenshots / Proof of Fix

Shared setup: two proxies with the same config, real Azure and OpenAI keys, OTel v2 on (LITELLM_OTEL_V2=true) with callback_settings.otel.baggage_metadata_keys: [requester_metadata.trace_id, requester_metadata.nested.deep] and a console span exporter writing to the proxy log. azure-realtime-badkey is a real Azure realtime deployment with a wrong key. Before runs the merge base on port 4100, After runs this PR's tip on port 4200. The chat payload is {"model":"gpt-4o-mini","messages":[{"role":"user","content":"Reply with exactly: pong"}],"max_tokens":5,"metadata":{"trace_id":"abc","nested":{"deep":"x"}}}. Screen recording of this exact run is in the Slack proof thread: https://berriaillm.slack.com/archives/D0BE48UMS58/p1790114060712649?thread_ts=1790114060.712649&cid=D0BE48UMS58

Before (89000e4)

Realtime handshake refused upstream

  1. wscat -c "ws://127.0.0.1:4100/v1/realtime?model=azure-realtime-badkey" -H "Authorization: Bearer sk-bp1102"
  2. Connected (press CTRL+C to quit) then Disconnected (code: 1006, reason: ""), no event received

Nested metadata promoted to OTEL span attributes

  1. curl -s http://127.0.0.1:4100/v1/chat/completions -H "Authorization: Bearer sk-bp1102" -H "Content-Type: application/json" -d '<payload above>'
  2. assistant: pong
  3. grep -cE "litellm.metadata.(trace_id|nested)" proxy-before.log prints 0

After (5aa45f1)

Realtime handshake refused upstream

  1. wscat -c "ws://127.0.0.1:4200/v1/realtime?model=azure-realtime-badkey" -H "Authorization: Bearer sk-bp1102"
  2. Connected (press CTRL+C to quit)
  3. < {"type": "error", "error": {"type": "server_error", "message": "Upstream realtime handshake rejected with HTTP 401"}}
  4. Disconnected (code: 1008, reason: "Upstream realtime handshake rejected with HTTP 401")

Nested metadata promoted to OTEL span attributes

  1. curl -s http://127.0.0.1:4200/v1/chat/completions -H "Authorization: Bearer sk-bp1102" -H "Content-Type: application/json" -d '<payload above>'
  2. assistant: pong
  3. grep -oE "\"litellm.metadata.(trace_id|nested)[^,]*" proxy-after.log | tail -3 prints "litellm.metadata.nested.deep": "x", "litellm.metadata.trace_id": "abc", "litellm.metadata.nested.deep": "x" (24 matches)

Proxy sanity on the tip: /health/liveliness 200, /v1/models 200 listing the three deployments, a plain chat completion answers Ok!. OpenAI realtime with a bad key behaves the same before and after because OpenAI accepts the upgrade and returns its own error event over the socket, so only the Azure leg exercises the handshake path

Type

🐛 Bug Fix
🆕 New Feature
🚄 Infrastructure

Caveats (if any)

Low

Backport qualification

Base 89000e4 (origin/stable/1.102.x tip). All picks applied with zero conflicts, .github untouched, every referenced identifier resolves on the line. Targeted tests: 910 passed at base, 924 passed after the picks with zero new failures; every unit test from both source PRs passes; the three test files touched by #42624 pass alone and together (25/25). ruff check clean on touched files, mypy error count unchanged versus base (76 both sides), ruff format debt unchanged versus base. Lock diff is confined to the anyio and soupsieve entries

Full tests/test_litellm run on both trees (four sequential chunks each, same test list, whole-suite runs OOM on this box): base 71 failed + 1 error / 55598 passed, branch before #42624 76 failed + 1 error / 55636 passed. The 13 new-on-branch ids were rerun alone: 9 pass alone (flaky settings and batch tests), 2 fail alone on base too (external mode lookup and tokenizer env), 2 were the stale redaction tests now removed by the #42624 pick. No unresolved regression remains at the tip

Scanner: baseline Critical and Medium anyio findings and both soupsieve Mediums are gone after the bump; no new findings versus base

Gauntlet (universal, standard depth, five lenses, clean tree pinned at 5aa45f1) returned SURVIVED on all five sub-claims: identifier and config-key closure, both picks delivering their behavior on this line, no broken stable-only callers, anyio 4.14.2 and soupsieve 2.9 resolving as expected, and the three #42624 test files passing alone and together with no remaining InvalidStatusCode test. An earlier run at da246e9 refuted only a mis-worded dependency clause (it required soupsieve in the runtime venv, where the ci group never installs it) and was classed not a regression

Final Attestation

  • The tests check the right things, including the edge cases, and regressions in the respective real-world customer use-cases are not possible after this PR

Note

Medium Risk
Touches realtime WebSocket error handling and OTEL attribute/baggage promotion across proxy and integrations; behavior changes are intentional but affect observability and client-visible close semantics.

Overview
Backports two customer-facing fixes to stable/1.102.x: clearer realtime failures when the upstream WebSocket handshake is rejected, and allowlisted promotion of nested caller metadata onto OpenTelemetry spans.

Realtime: Upstream handshake failures now catch InvalidStatus (replacing deprecated InvalidStatusCode) and use shared close_after_upstream_handshake_refusal: emit an OpenAI-style error event, then close with RFC-appropriate codes (e.g. 401/403 → 1008, 429 → 1013). Applied across proxy, OpenAI/Azure handlers, and generic HTTP realtime paths; Azure also sends an error event on unexpected internal failures.

OTEL: Adds baggage_metadata_keys / LITELLM_OTEL_BAGGAGE_METADATA_KEYS on v1 and v2. Nested requester_metadata is flattened and allowlisted paths (e.g. requester_metadata.trace_id) stamp litellm.metadata.trace_id on spans and request baggage from the pre-call hook, without dumping unlisted keys.

Tests and e2e cover both behaviors; lockfile bumps anyio and soupsieve only.

Reviewed by Cursor Bugbot for commit 5aa45f1. Bugbot is set up for automated code reviews on this repo. Configure here.

Link to Devin session: https://app.devin.ai/sessions/97da7793a06d4de3b4561b4a605cb3a9
Open in Devin Desktop: https://app.devin.ai/desktop/session/97da7793a06d4de3b4561b4a605cb3a9?variant=devin

devin-ai-integration Bot and others added 3 commits September 22, 2026 23:02
…t and policy close (#42388)

* fix(realtime): surface an upstream handshake refusal as an error event and policy close

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(realtime): tidy the handshake refusal e2e

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(realtime): keep upstream exception text out of the Azure client error

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* refactor(realtime): map handshake refusal close codes with a lookup

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
(cherry picked from commit 2bab39e)
…quest_metadata_keys

feat(otel): promote nested request metadata keys to litellm.metadata.* span attributes

(cherry picked from commit 79fc515)
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@devin-ai-integration
devin-ai-integration Bot requested a review from a team September 22, 2026 23:19
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
1 out of 3 committers have signed the CLA.

✅ yuneng-berri
❌ yassin-berriai
❌ devin-ai-integration[bot]
You have signed the CLA already but the status is still pending? Let us recheck it.

@greptile-apps

greptile-apps Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

The PR appears safe to merge, with no outstanding previous findings or newly introduced actionable issues.

Summary

This backport improves realtime handshake-refusal reporting, adds allowlisted nested request metadata to OpenTelemetry spans, and refreshes two locked dependencies.

  • Sends a structured realtime error event and maps rejected upstream handshakes to valid WebSocket close codes.
  • Flattens nested caller metadata and promotes only configured paths in both OpenTelemetry implementations.
  • Adds focused unit and E2E coverage for the new behavior.
  • Updates anyio to 4.14.2 and soupsieve to 2.9 in the lockfile.
  • The changes since the previous review only correct test imports and remove stale tests for an unsupported legacy exception path.

Reviews (2) · Last reviewed commit: "test(realtime): drop legacy InvalidStatu..."

Comment thread litellm/integrations/otel/model/baggage.py
Comment thread litellm/litellm_core_utils/realtime_errors.py
…s imports

The two redaction tests raised the deprecated InvalidStatusCode, which the
websockets 15 asyncio client never raises, and asserted the raw 403 close
code that the handshake refusal path replaced with 1008. The refusal path
builds its close reason from the status code alone, so there is no secret
to redact there, and the handshake refusal tests already cover the error
event and the 1008 close.

Those refusal tests only passed when run after a sibling test had imported
websockets.asyncio.client, since websockets lazy-loads its exceptions
submodule. Importing InvalidStatus, Response, and Headers from their own
submodules makes them pass in any order.

(cherry picked from commit 54dbe8e)
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

@greptileai

@mateo-berri

Copy link
Copy Markdown
Contributor

bugbot run

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 5aa45f1. Configure here.

@mateo-berri
mateo-berri merged commit d09bbae into stable/1.102.x Sep 23, 2026
9 of 10 checks passed
@mateo-berri
mateo-berri deleted the litellm_backport_stable_1_102_x_realtime_otel branch September 23, 2026 03:04
hbjydev pushed a commit to hbjydev/phoebe that referenced this pull request Sep 23, 2026
…02.1) (#736)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/berriai/litellm](https://images.chainguard.dev/directory/image/wolfi-base/overview) ([source](https://github.com/BerriAI/litellm)) | patch | `v1.102.0` → `v1.102.1` |

---

### Release Notes

<details>
<summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary>

### [`v1.102.1`](https://github.com/BerriAI/litellm/releases/tag/v1.102.1)

[Compare Source](BerriAI/litellm@v1.102.0...v1.102.1)

##### Verify Docker Image Signature

All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53).

**Verify using the pinned commit hash (recommended):**

A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:

```bash
cosign verify \
  --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \
  ghcr.io/berriai/litellm:v1.102.1
```

**Verify using the release tag (convenience):**

Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:

```bash
cosign verify \
  --key https://raw.githubusercontent.com/BerriAI/litellm/v1.102.1/cosign.pub \
  ghcr.io/berriai/litellm:v1.102.1
```

Expected output:

```
The following checks were performed on each of these signatures:
  - The cosign claims were validated
  - The signatures were verified against the specified public key
```

***

##### What's Changed

- fix(anthropic): backport [#&#8203;42152](BerriAI/litellm#42152) and [#&#8203;42288](BerriAI/litellm#42288) to stable/1.102.x for v1.102.1 by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42538](BerriAI/litellm#42538)
- feat(typesafe): backport the jev change set to stable/1.102.x for v1.102.1 by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42595](BerriAI/litellm#42595)
- chore(release): backport [#&#8203;42388](BerriAI/litellm#42388) and [#&#8203;41462](BerriAI/litellm#41462) to stable/1.102.x by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42618](BerriAI/litellm#42618)

**Full Changelog**: <BerriAI/litellm@v1.102.0...v1.102.1>

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/London)

- Branch creation
  - At any time (no schedule defined)
- 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 these updates again.

---

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

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDguMiIsInVwZGF0ZWRJblZlciI6IjQ0LjEwOC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.hayden.moe/hayden/phoebe/pulls/736
GiorgioAresu pushed a commit to GiorgioAresu/home-ops that referenced this pull request Sep 23, 2026
…02.1) (#2200)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/berriai/litellm](https://images.chainguard.dev/directory/image/wolfi-base/overview) ([source](https://github.com/BerriAI/litellm)) | patch | `v1.102.0` → `v1.102.1` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/6) for more information.

---

### Release Notes

<details>
<summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary>

### [`v1.102.1`](https://github.com/BerriAI/litellm/releases/tag/v1.102.1)

[Compare Source](BerriAI/litellm@v1.102.0...v1.102.1)

#### Verify Docker Image Signature

All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53).

**Verify using the pinned commit hash (recommended):**

A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:

```bash
cosign verify \
  --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \
  ghcr.io/berriai/litellm:v1.102.1
```

**Verify using the release tag (convenience):**

Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:

```bash
cosign verify \
  --key https://raw.githubusercontent.com/BerriAI/litellm/v1.102.1/cosign.pub \
  ghcr.io/berriai/litellm:v1.102.1
```

Expected output:

```
The following checks were performed on each of these signatures:
  - The cosign claims were validated
  - The signatures were verified against the specified public key
```

***

#### What's Changed

- fix(anthropic): backport [#&#8203;42152](BerriAI/litellm#42152) and [#&#8203;42288](BerriAI/litellm#42288) to stable/1.102.x for v1.102.1 by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42538](BerriAI/litellm#42538)
- feat(typesafe): backport the jev change set to stable/1.102.x for v1.102.1 by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42595](BerriAI/litellm#42595)
- chore(release): backport [#&#8203;42388](BerriAI/litellm#42388) and [#&#8203;41462](BerriAI/litellm#41462) to stable/1.102.x by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42618](BerriAI/litellm#42618)

**Full Changelog**: <BerriAI/litellm@v1.102.0...v1.102.1>

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/Rome)

- Branch creation
  - At any time (no schedule defined)
- 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 has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDQuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjEwNC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.aresu.eu/GiorgioAresu/home-ops/pulls/2200
doonga pushed a commit to greyrock-labs/home-ops that referenced this pull request Sep 23, 2026
…02.1) (#267)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/berriai/litellm](https://images.chainguard.dev/directory/image/wolfi-base/overview) ([source](https://github.com/BerriAI/litellm)) | patch | `v1.102.0` → `v1.102.1` |

---

### Release Notes

<details>
<summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary>

### [`v1.102.1`](https://github.com/BerriAI/litellm/releases/tag/v1.102.1)

[Compare Source](BerriAI/litellm@v1.102.0...v1.102.1)

#### Verify Docker Image Signature

All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53).

**Verify using the pinned commit hash (recommended):**

A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:

```bash
cosign verify \
  --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \
  ghcr.io/berriai/litellm:v1.102.1
```

**Verify using the release tag (convenience):**

Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:

```bash
cosign verify \
  --key https://raw.githubusercontent.com/BerriAI/litellm/v1.102.1/cosign.pub \
  ghcr.io/berriai/litellm:v1.102.1
```

Expected output:

```
The following checks were performed on each of these signatures:
  - The cosign claims were validated
  - The signatures were verified against the specified public key
```

***

#### What's Changed

- fix(anthropic): backport [#&#8203;42152](BerriAI/litellm#42152) and [#&#8203;42288](BerriAI/litellm#42288) to stable/1.102.x for v1.102.1 by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42538](BerriAI/litellm#42538)
- feat(typesafe): backport the jev change set to stable/1.102.x for v1.102.1 by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42595](BerriAI/litellm#42595)
- chore(release): backport [#&#8203;42388](BerriAI/litellm#42388) and [#&#8203;41462](BerriAI/litellm#41462) to stable/1.102.x by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42618](BerriAI/litellm#42618)

**Full Changelog**: <BerriAI/litellm@v1.102.0...v1.102.1>

</details>

---

### Configuration

📅 **Schedule**: (in timezone America/New_York)

- Branch creation
  - At any time (no schedule defined)
- 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 has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDUuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjEwNS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.greyrock.io/todd/home-ops/pulls/267

This branch is waiting to be deployed

1 waiting deployment
e2e-changed — 5aa45f1b Waiting Sep 23, 2026 by devin-ai-integration[bot] via Run changed e2e tests against the stage-mirror stack #9952
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.

4 participants