Skip to content

Release: dev → main#425

Merged
ng merged 85 commits intomainfrom
dev
Apr 13, 2026
Merged

Release: dev → main#425
ng merged 85 commits intomainfrom
dev

Conversation

@ng
Copy link
Copy Markdown
Contributor

@ng ng commented Apr 13, 2026

Summary

Promotes everything on `dev` since the last main release (82 commits, 143 files, +9239/-2699).

Headlining features

Operational fixes

Dependency updates

~20 renovate PRs across React 19.2.5, Next 16.2.3, vitest 4.1.4, tanstack/react-query 5.97.0, tRPC 11.16, lucide-react 1.x, etc.

Misc

Test plan

  • All unit tests pass on dev (606+ tests)
  • Typecheck clean
  • Build succeeds (standalone output)
  • Deployed to Pod 4 at `192.168.1.88` and smoke-tested:
    • schedule on/off
    • create curve from preset
    • edit curve, change days, save
    • day-conflict reassign dialog
    • delete curve
    • side selector left/right/both
    • active-curve highlighting + next set point

ng and others added 30 commits April 1, 2026 20:07
## Summary
- When user initiates update check with internet blocked, shows prompt
to temporarily allow internet
- On allow: unblocks internet, proceeds with update, re-blocks
automatically after completion/failure
- Uses `system.internetStatus` and `system.setInternetAccess` APIs
- Internet re-blocked in both success and failure paths via ref tracking

Closes #306

## Test plan
- [ ] With internet blocked: press update → verify prompt appears
- [ ] Press "Allow & Update" → verify internet unblocks, update
proceeds, internet re-blocks
- [ ] Press Cancel → verify no changes
- [ ] With internet already allowed: press update → verify normal flow
(no prompt)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## New Features
* Update process now detects when internet access is blocked before
proceeding
* Displays a prompt asking users to allow internet access when needed
* Added "Allow & Update" button for users to grant temporary internet
access
* Automatically re-restricts internet access after the update completes

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- New auto-off watcher service that monitors sleep_records for bed-exit
events and powers off after configurable timeout
- Per-side countdown timers with reset on re-entry, suppression during
run-once sessions
- Web UI: toggle + duration picker (5–120 min) in side settings form
- Wired into server startup/shutdown lifecycle

Closes #257

## Test plan
- [ ] Enable auto-off with 5 min timeout — verify side powers off after
no presence
- [ ] Verify timer resets on bed re-entry
- [ ] Verify auto-off suppressed during active run-once session
- [ ] Verify duration picker UI renders correctly

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Per-side automatic power-off: enable/disable auto-off per side with
configurable timeout in Settings (toggle + duration picker).
* Settings apply immediately: changes to auto-off or timeout take effect
without needing a restart.
* Auto-off respects active use: timers pause/cancel when a side is
powered on or detects return to bed, reducing unwanted shutdowns.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
…2.0 (#296)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [trpc-to-openapi](https://redirect.github.com/mcampa/trpc-to-openapi)
| [`3.1.0` →
`3.2.0`](https://renovatebot.com/diffs/npm/trpc-to-openapi/3.1.0/3.2.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/trpc-to-openapi/3.2.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/trpc-to-openapi/3.1.0/3.2.0?slim=true)
|

---

### Configuration

📅 **Schedule**: 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…ency conventional-changelog-conventionalcommits to v9.3.1 (#291)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[conventional-changelog-conventionalcommits](https://redirect.github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-conventionalcommits#readme)
([source](https://redirect.github.com/conventional-changelog/conventional-changelog/tree/HEAD/packages/conventional-changelog-conventionalcommits))
| [`9.1.0` →
`9.3.1`](https://renovatebot.com/diffs/npm/conventional-changelog-conventionalcommits/9.1.0/9.3.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/conventional-changelog-conventionalcommits/9.3.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/conventional-changelog-conventionalcommits/9.1.0/9.3.1?slim=true)
|

---

### Release Notes

<details>
<summary>conventional-changelog/conventional-changelog
(conventional-changelog-conventionalcommits)</summary>

###
[`v9.3.1`](https://redirect.github.com/conventional-changelog/conventional-changelog/blob/HEAD/packages/conventional-changelog-conventionalcommits/CHANGELOG.md#931-2026-03-29)

[Compare
Source](https://redirect.github.com/conventional-changelog/conventional-changelog/compare/conventional-changelog-conventionalcommits-v9.3.0...conventional-changelog-conventionalcommits-v9.3.1)

##### Bug Fixes

- skip mention linkification inside inline code
([#&#8203;1444](https://redirect.github.com/conventional-changelog/conventional-changelog/issues/1444))
([c598bf1](https://redirect.github.com/conventional-changelog/conventional-changelog/commit/c598bf1dd8fe31fc3ce3ec561ac8b2b77cee3a02))

###
[`v9.3.0`](https://redirect.github.com/conventional-changelog/conventional-changelog/blob/HEAD/packages/conventional-changelog-conventionalcommits/CHANGELOG.md#930-2026-03-04)

[Compare
Source](https://redirect.github.com/conventional-changelog/conventional-changelog/compare/conventional-changelog-conventionalcommits-v9.2.0...conventional-changelog-conventionalcommits-v9.3.0)

##### Features

- inline hbs templates in code as strings
([#&#8203;1434](https://redirect.github.com/conventional-changelog/conventional-changelog/issues/1434))
([0d5a4a6](https://redirect.github.com/conventional-changelog/conventional-changelog/commit/0d5a4a68b0ba79a3c97793395c6549af02272325))

###
[`v9.2.0`](https://redirect.github.com/conventional-changelog/conventional-changelog/blob/HEAD/packages/conventional-changelog-conventionalcommits/CHANGELOG.md#920-2026-03-01)

[Compare
Source](https://redirect.github.com/conventional-changelog/conventional-changelog/compare/conventional-changelog-conventionalcommits-v9.1.0...conventional-changelog-conventionalcommits-v9.2.0)

##### Features

- align newline formatting across presets
([#&#8203;1431](https://redirect.github.com/conventional-changelog/conventional-changelog/issues/1431))
([b0721e1](https://redirect.github.com/conventional-changelog/conventional-changelog/commit/b0721e1d6c30b03e54d4fa5e271ecb67b5ae7ebe))

</details>

---

### Configuration

📅 **Schedule**: 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
….0 (#290)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [better-sqlite3](https://redirect.github.com/WiseLibs/better-sqlite3)
| [`12.6.2` →
`12.8.0`](https://renovatebot.com/diffs/npm/better-sqlite3/12.6.2/12.8.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/better-sqlite3/12.8.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/better-sqlite3/12.6.2/12.8.0?slim=true)
|

---

### Release Notes

<details>
<summary>WiseLibs/better-sqlite3 (better-sqlite3)</summary>

###
[`v12.8.0`](https://redirect.github.com/WiseLibs/better-sqlite3/releases/tag/v12.8.0)

[Compare
Source](https://redirect.github.com/WiseLibs/better-sqlite3/compare/v12.6.2...v12.8.0)

#### What's Changed

- Readme: requires Node.js v20 or later by
[@&#8203;Prinzhorn](https://redirect.github.com/Prinzhorn) in
[#&#8203;1443](https://redirect.github.com/WiseLibs/better-sqlite3/pull/1443)
- Update SQLite to version 3.51.3 in
[#&#8203;1460](https://redirect.github.com/WiseLibs/better-sqlite3/pull/1460)
- fix: use HolderV2() for PropertyCallbackInfo on V8 >= 12.5 by
[@&#8203;tstone-1](https://redirect.github.com/tstone-1) in
[#&#8203;1459](https://redirect.github.com/WiseLibs/better-sqlite3/pull/1459)

#### New Contributors

- [@&#8203;tstone-1](https://redirect.github.com/tstone-1) made their
first contribution in
[#&#8203;1459](https://redirect.github.com/WiseLibs/better-sqlite3/pull/1459)

#### Why SQLite v3.51.3 instead of v3.52.0

From the SQLite team:

> Some important issues have been found with version 3.52.0. In order to
give us time to deal with those issues, we plan to withdraw the 3.52.0
release. In its place, we will put up a new 3.51.3 patch release that
includes a fix for the recently discovered WAL-reset bug as well as
other patches. This will happen probably within about the next twelve
hours.
>
> Hence, if you were planning to upgrade to 3.52.0 tomorrow (Friday,
2026-03-14), perhaps it would be better to wait a day or so for 3.51.3.
>
> At some point we will do version 3.52.1 which will hopefully resolve
the issues that have arisen with the 3.52.0 release.

**Full Changelog**:
<WiseLibs/better-sqlite3@v12.7.1...v12.8.0>

</details>

---

### Configuration

📅 **Schedule**: 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Rule 3 matched both minor and major update types with automerge: false,
overriding rule 2's automerge: true for minor updates. This caused all
minor dependency updates to create PRs instead of auto-merging.
Delays auto-merging patch/minor updates until 3 days after publish.
Gives the community time to catch supply chain attacks on newly
published versions before they're auto-merged.
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@eslint/css](https://redirect.github.com/eslint/css) | [`1.0.0` →
`1.1.0`](https://renovatebot.com/diffs/npm/@eslint%2fcss/1.0.0/1.1.0) |
![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fcss/1.1.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@eslint%2fcss/1.0.0/1.1.0?slim=true)
|

---

### Release Notes

<details>
<summary>eslint/css (@&#8203;eslint/css)</summary>

###
[`v1.1.0`](https://redirect.github.com/eslint/css/blob/HEAD/CHANGELOG.md#110-2026-03-29)

[Compare
Source](https://redirect.github.com/eslint/css/compare/058acc848a566a8005259496ddbccb97344e8a62...a131cbadc4005b4b31e296a25b6b23f0118dbb47)

##### Features

- add CSS unit baseline checking
([#&#8203;403](https://redirect.github.com/eslint/css/issues/403))
([51f24f4](https://redirect.github.com/eslint/css/commit/51f24f494860ccd9852f876040de8bcf86013e34))

##### Bug Fixes

- correctly extract baseline support for CSS functions
([#&#8203;401](https://redirect.github.com/eslint/css/issues/401))
([a1b5c6f](https://redirect.github.com/eslint/css/commit/a1b5c6f5e96d2b63d1804f686bfe30180d483966))
- update baseline data
([#&#8203;399](https://redirect.github.com/eslint/css/issues/399))
([235f451](https://redirect.github.com/eslint/css/commit/235f451d4ce4af1467ad0a0413ef3b2cf006527d))
- update baseline data
([#&#8203;405](https://redirect.github.com/eslint/css/issues/405))
([616558e](https://redirect.github.com/eslint/css/commit/616558e87e6cbc1e36cbaa8b13e498203eab2fc2))
- update baseline data
([#&#8203;412](https://redirect.github.com/eslint/css/issues/412))
([6f8c083](https://redirect.github.com/eslint/css/commit/6f8c083765e827dbec82b41b3feedb76be1cb7bc))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDIuNyIsInVwZGF0ZWRJblZlciI6IjQzLjEwMi43IiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyIsIm1pbm9yIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…query to v5.96.1 (#310)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@tanstack/react-query](https://tanstack.com/query)
([source](https://redirect.github.com/TanStack/query/tree/HEAD/packages/react-query))
| [`5.95.2` →
`5.96.1`](https://renovatebot.com/diffs/npm/@tanstack%2freact-query/5.95.2/5.96.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@tanstack%2freact-query/5.96.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tanstack%2freact-query/5.95.2/5.96.1?slim=true)
|

---

### Release Notes

<details>
<summary>TanStack/query (@&#8203;tanstack/react-query)</summary>

###
[`v5.96.1`](https://redirect.github.com/TanStack/query/blob/HEAD/packages/react-query/CHANGELOG.md#5961)

[Compare
Source](https://redirect.github.com/TanStack/query/compare/@tanstack/react-query@5.96.0...@tanstack/react-query@5.96.1)

##### Patch Changes

- Updated dependencies \[]:
-
[@&#8203;tanstack/query-core](https://redirect.github.com/tanstack/query-core)@&#8203;5.96.1

###
[`v5.96.0`](https://redirect.github.com/TanStack/query/blob/HEAD/packages/react-query/CHANGELOG.md#5960)

[Compare
Source](https://redirect.github.com/TanStack/query/compare/@tanstack/react-query@5.95.2...@tanstack/react-query@5.96.0)

##### Patch Changes

- Updated dependencies \[]:
-
[@&#8203;tanstack/query-core](https://redirect.github.com/tanstack/query-core)@&#8203;5.96.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDIuNyIsInVwZGF0ZWRJblZlciI6IjQzLjEwMi43IiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyIsIm1pbm9yIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…act to v5.2.0 (#282)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[@vitejs/plugin-react](https://redirect.github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme)
([source](https://redirect.github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react))
| [`5.1.4` →
`5.2.0`](https://renovatebot.com/diffs/npm/@vitejs%2fplugin-react/5.1.4/5.2.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@vitejs%2fplugin-react/5.2.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitejs%2fplugin-react/5.1.4/5.2.0?slim=true)
|

---

### Release Notes

<details>
<summary>vitejs/vite-plugin-react
(@&#8203;vitejs/plugin-react)</summary>

###
[`v5.2.0`](https://redirect.github.com/vitejs/vite-plugin-react/compare/f066114c3e6bf18f5209ff3d3ef6bf1ab46d3866...fda3a86095556b49ae3c995eb57a30d4e0b8fa8d)

[Compare
Source](https://redirect.github.com/vitejs/vite-plugin-react/compare/f066114c3e6bf18f5209ff3d3ef6bf1ab46d3866...fda3a86095556b49ae3c995eb57a30d4e0b8fa8d)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [cbor2](https://redirect.github.com/agronholm/cbor2)
([changelog](https://cbor2.readthedocs.io/en/latest/versionhistory.html))
| `==5.8.0` → `==5.9.0` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/cbor2/5.9.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/cbor2/5.8.0/5.9.0?slim=true)
|

---

### Release Notes

<details>
<summary>agronholm/cbor2 (cbor2)</summary>

###
[`v5.9.0`](https://redirect.github.com/agronholm/cbor2/releases/tag/5.9.0)

[Compare
Source](https://redirect.github.com/agronholm/cbor2/compare/5.8.0...5.9.0)

- Added the `max_depth` decoder parameter to limit the maximum allowed
nesting level of containers, with a default value of 400 levels
(CVE-2026-26209)
- Changed the default `read_size` from 4096 to 1 for backwards
compatibility. The buffered reads introduced in 5.8.0 could cause issues
when code needs to access the stream position after decoding. Users can
opt-in to faster decoding by passing `read_size=4096` when they don't
need to access the stream directly after decoding. Added a direct read
path for `read_size=1` to avoid buffer management overhead.
([#&#8203;275](https://redirect.github.com/agronholm/cbor2/pull/275); PR
by [@&#8203;andreer](https://redirect.github.com/andreer))
- Fixed C encoder not respecting string referencing when encoding
string-type datetimes (tag 0)
([#&#8203;254](https://redirect.github.com/agronholm/cbor2/issues/254))
- Fixed a missed check for an exception in the C implementation of
`CBOREncoder.encode_shared()`
([#&#8203;287](https://redirect.github.com/agronholm/cbor2/issues/287))
- Fixed two reference/memory leaks in the C extension's long string
decoder
([#&#8203;290](https://redirect.github.com/agronholm/cbor2/pull/290) PR
by [@&#8203;killiancowan82](https://redirect.github.com/killiancowan82))
- Fixed C decoder ignoring the `str_errors` setting when decoding
strings, and improved string decoding performance by using stack
allocation for small strings and eliminating unnecessary conditionals.
Benchmarks show 9-17% faster deserialization.
([#&#8203;255](https://redirect.github.com/agronholm/cbor2/issues/255);
PR by [@&#8203;andreer](https://redirect.github.com/andreer))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@trpc/client](https://trpc.io)
([source](https://redirect.github.com/trpc/trpc/tree/HEAD/packages/client))
| [`11.10.0` →
`11.16.0`](https://renovatebot.com/diffs/npm/@trpc%2fclient/11.10.0/11.16.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@trpc%2fclient/11.16.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@trpc%2fclient/11.10.0/11.16.0?slim=true)
|
| [@trpc/next](https://trpc.io)
([source](https://redirect.github.com/trpc/trpc/tree/HEAD/packages/next))
| [`11.10.0` →
`11.16.0`](https://renovatebot.com/diffs/npm/@trpc%2fnext/11.10.0/11.16.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@trpc%2fnext/11.16.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@trpc%2fnext/11.10.0/11.16.0?slim=true)
|
| [@trpc/react-query](https://trpc.io)
([source](https://redirect.github.com/trpc/trpc/tree/HEAD/packages/react))
| [`11.10.0` →
`11.16.0`](https://renovatebot.com/diffs/npm/@trpc%2freact-query/11.10.0/11.16.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@trpc%2freact-query/11.16.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@trpc%2freact-query/11.10.0/11.16.0?slim=true)
|
| [@trpc/server](https://trpc.io)
([source](https://redirect.github.com/trpc/trpc/tree/HEAD/packages/server))
| [`11.10.0` →
`11.16.0`](https://renovatebot.com/diffs/npm/@trpc%2fserver/11.10.0/11.16.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@trpc%2fserver/11.16.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@trpc%2fserver/11.10.0/11.16.0?slim=true)
|

---

### Release Notes

<details>
<summary>trpc/trpc (@&#8203;trpc/client)</summary>

###
[`v11.16.0`](https://redirect.github.com/trpc/trpc/releases/tag/v11.16.0)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.15.2...v11.16.0)

#### What's Changed

- feat: OpenAPI Cyclic Types support by
[@&#8203;Nick-Lucas](https://redirect.github.com/Nick-Lucas) in
[#&#8203;7283](https://redirect.github.com/trpc/trpc/pull/7283)
- chore: Review stale skills (manual) by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in [#&#8203;7294](https://redirect.github.com/trpc/trpc/pull/7294)

##### `@trpc/openapi` 11.16.0-alpha

- Drops the type depth limit of 20, and significantly hardens
cyclic-type support for both inference and Zod
- Support zod.lazy via Standard Schema fallback
- Strip symbols from output (no more `__@&#8203;asyncIterator@5456`
symbols in output)
- Add more comprehensive types for the OpenAPI doc from the official
package (now a dependency) and apply some patches to these types because
they're slightly outdated
- Fixes several issues with gathering schema descriptions, such as
consuming jsdoc comments from node\_modules types

#### New Contributors

-
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
made their first contribution in
[#&#8203;7294](https://redirect.github.com/trpc/trpc/pull/7294)

**Full Changelog**:
<trpc/trpc@v11.15.1...v11.16.0>

###
[`v11.15.2`](https://redirect.github.com/trpc/trpc/compare/v11.15.1...v11.15.2)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.15.1...v11.15.2)

###
[`v11.15.1`](https://redirect.github.com/trpc/trpc/releases/tag/v11.15.1)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.15.0...v11.15.1)

##### What's Changed

- fix(www): render sponsor links in static HTML for SEO by
[@&#8203;shtefcs](https://redirect.github.com/shtefcs) in
[#&#8203;7285](https://redirect.github.com/trpc/trpc/pull/7285)
- fix: error handling with Node VM by
[@&#8203;znikola](https://redirect.github.com/znikola) in
[#&#8203;7280](https://redirect.github.com/trpc/trpc/pull/7280)

##### New Contributors

- [@&#8203;shtefcs](https://redirect.github.com/shtefcs) made their
first contribution in
[#&#8203;7285](https://redirect.github.com/trpc/trpc/pull/7285)
- [@&#8203;znikola](https://redirect.github.com/znikola) made their
first contribution in
[#&#8203;7280](https://redirect.github.com/trpc/trpc/pull/7280)

**Full Changelog**:
<trpc/trpc@v11.15.0...v11.15.1>

###
[`v11.15.0`](https://redirect.github.com/trpc/trpc/releases/tag/v11.15.0)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.14.1...v11.15.0)

#### What's Changed

- docs: empty string fallback on pathExtractor by
[@&#8203;dorukozerr](https://redirect.github.com/dorukozerr) in
[#&#8203;7270](https://redirect.github.com/trpc/trpc/pull/7270)
- feat(server): max batch size by
[@&#8203;Nick-Lucas](https://redirect.github.com/Nick-Lucas) in
[#&#8203;7191](https://redirect.github.com/trpc/trpc/pull/7191)

#### New Contributors

- [@&#8203;dorukozerr](https://redirect.github.com/dorukozerr) made
their first contribution in
[#&#8203;7270](https://redirect.github.com/trpc/trpc/pull/7270)

**Full Changelog**:
<trpc/trpc@v11.14.1...v11.15.0>

###
[`v11.14.1`](https://redirect.github.com/trpc/trpc/releases/tag/v11.14.1)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.14.0...v11.14.1)

##### What's Changed

- feat: Tanstack Intent Skills by
[@&#8203;Nick-Lucas](https://redirect.github.com/Nick-Lucas) in
[#&#8203;7252](https://redirect.github.com/trpc/trpc/pull/7252)

**Full Changelog**:
<trpc/trpc@v11.14.0...v11.14.1>

###
[`v11.14.0`](https://redirect.github.com/trpc/trpc/releases/tag/v11.14.0)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.13.4...v11.14.0)

#### What's Changed

- fix(server): use correct call index in batch stream error handling by
[@&#8203;karesansui-u](https://redirect.github.com/karesansui-u) in
[#&#8203;7262](https://redirect.github.com/trpc/trpc/pull/7262)
- fix: preserve buffered chunks on stream close in httpBatchStreamLink
by [@&#8203;luinbytes](https://redirect.github.com/luinbytes) in
[#&#8203;7233](https://redirect.github.com/trpc/trpc/pull/7233)

#### New Contributors

- [@&#8203;karesansui-u](https://redirect.github.com/karesansui-u) made
their first contribution in
[#&#8203;7262](https://redirect.github.com/trpc/trpc/pull/7262)
- [@&#8203;luinbytes](https://redirect.github.com/luinbytes) made their
first contribution in
[#&#8203;7233](https://redirect.github.com/trpc/trpc/pull/7233)

**Full Changelog**:
<trpc/trpc@v11.13.4...v11.14.0>

###
[`v11.13.4`](https://redirect.github.com/trpc/trpc/compare/v11.13.3...v11.13.4)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.13.3...v11.13.4)

###
[`v11.13.3`](https://redirect.github.com/trpc/trpc/compare/v11.13.2...v11.13.3)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.13.2...v11.13.3)

###
[`v11.13.2`](https://redirect.github.com/trpc/trpc/releases/tag/v11.13.2)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.13.1...v11.13.2)

##### What's Changed

- fix: correct typo 'commitedFiles' → 'committedFiles' by
[@&#8203;mitre88](https://redirect.github.com/mitre88) in
[#&#8203;7221](https://redirect.github.com/trpc/trpc/pull/7221)
- feat(docs): revamp docs content for 2026, more framework agnostic,
improved Next.js docs by
[@&#8203;Nick-Lucas](https://redirect.github.com/Nick-Lucas) in
[#&#8203;7193](https://redirect.github.com/trpc/trpc/pull/7193)
- feat: Support OpenAPI json generation for any tRPC appRouter by
[@&#8203;Nick-Lucas](https://redirect.github.com/Nick-Lucas) in
[#&#8203;7231](https://redirect.github.com/trpc/trpc/pull/7231)
- feat: Fix some OpenAPI AI feedback by
[@&#8203;Nick-Lucas](https://redirect.github.com/Nick-Lucas) in
[#&#8203;7242](https://redirect.github.com/trpc/trpc/pull/7242)
- feat: add `streamHeader` option to httpBatchStreamLink by
[@&#8203;anatolzak](https://redirect.github.com/anatolzak) in
[#&#8203;7241](https://redirect.github.com/trpc/trpc/pull/7241)

##### New Contributors

- [@&#8203;mitre88](https://redirect.github.com/mitre88) made their
first contribution in
[#&#8203;7221](https://redirect.github.com/trpc/trpc/pull/7221)
- [@&#8203;pendant-k](https://redirect.github.com/pendant-k) made their
first contribution in
[#&#8203;7236](https://redirect.github.com/trpc/trpc/pull/7236)

**Full Changelog**:
<trpc/trpc@v11.12.0...v11.13.2>

###
[`v11.13.1`](https://redirect.github.com/trpc/trpc/compare/v11.13.0...v11.13.1)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.13.0...v11.13.1)

###
[`v11.13.0`](https://redirect.github.com/trpc/trpc/compare/v11.12.1...v11.13.0)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.12.1...v11.13.0)

###
[`v11.12.1`](https://redirect.github.com/trpc/trpc/compare/v11.12.0...v11.12.1)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.12.0...v11.12.1)

###
[`v11.12.0`](https://redirect.github.com/trpc/trpc/compare/e96639e69e3469b761e83afc967d3d45e201876c...8a144e9005ec9177b41aefee914d0f5b6c471aa9)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.11.0...v11.12.0)

###
[`v11.11.0`](https://redirect.github.com/trpc/trpc/releases/tag/v11.11.0)

[Compare
Source](https://redirect.github.com/trpc/trpc/compare/v11.10.0...v11.11.0)

##### What's Changed

- docs: fix zod v4 zAsyncIterable generic order in subscriptions guide
by [@&#8203;aviu16](https://redirect.github.com/aviu16) in
[#&#8203;7174](https://redirect.github.com/trpc/trpc/pull/7174)
- Update context documentation to remove database reference by
[@&#8203;clicktodev](https://redirect.github.com/clicktodev) in
[#&#8203;7188](https://redirect.github.com/trpc/trpc/pull/7188)
- docs: add note on tradeoffs for large clients in createContextInner by
[@&#8203;clicktodev](https://redirect.github.com/clicktodev) in
[#&#8203;7192](https://redirect.github.com/trpc/trpc/pull/7192)
- feat(client): Export types SubscriptionResolver and ResolverDef by
[@&#8203;cooolbros](https://redirect.github.com/cooolbros) in
[#&#8203;6803](https://redirect.github.com/trpc/trpc/pull/6803)

##### New Contributors

- [@&#8203;aviu16](https://redirect.github.com/aviu16) made their first
contribution in
[#&#8203;7174](https://redirect.github.com/trpc/trpc/pull/7174)
- [@&#8203;cooolbros](https://redirect.github.com/cooolbros) made their
first contribution in
[#&#8203;6803](https://redirect.github.com/trpc/trpc/pull/6803)

**Full Changelog**:
<trpc/trpc@v11.10.0...v11.11.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[eslint-config-next](https://nextjs.org/docs/app/api-reference/config/eslint)
([source](https://redirect.github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next))
| [`16.1.6` →
`16.2.1`](https://renovatebot.com/diffs/npm/eslint-config-next/16.1.6/16.2.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-config-next/16.2.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-config-next/16.1.6/16.2.1?slim=true)
|
| [next](https://nextjs.org)
([source](https://redirect.github.com/vercel/next.js)) | [`16.1.6` →
`16.2.1`](https://renovatebot.com/diffs/npm/next/16.1.6/16.2.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/next/16.2.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/next/16.1.6/16.2.1?slim=true)
|

---

### Release Notes

<details>
<summary>vercel/next.js (eslint-config-next)</summary>

###
[`v16.2.1`](https://redirect.github.com/vercel/next.js/releases/tag/v16.2.1)

[Compare
Source](https://redirect.github.com/vercel/next.js/compare/v16.2.0...v16.2.1)

> \[!NOTE]
> This release is backporting bug fixes. It does **not** include all
pending features/changes on canary.

##### Core Changes

- docs: post release amends
([#&#8203;91715](https://redirect.github.com/vercel/next.js/issues/91715))
- docs: fix broken Activity Patterns demo link in preserving UI state
guide
([#&#8203;91698](https://redirect.github.com/vercel/next.js/issues/91698))
- Fix adapter outputs for dynamic metadata routes
([#&#8203;91680](https://redirect.github.com/vercel/next.js/issues/91680))
- Turbopack: fix webpack loader runner layer
([#&#8203;91727](https://redirect.github.com/vercel/next.js/issues/91727))
- Fix server actions in standalone mode with `cacheComponents`
([#&#8203;91711](https://redirect.github.com/vercel/next.js/issues/91711))
- turbo-persistence: remove Unmergeable mmap advice
([#&#8203;91713](https://redirect.github.com/vercel/next.js/issues/91713))
- Fix layout segment optimization: move app-page imports to
server-utility transition
([#&#8203;91701](https://redirect.github.com/vercel/next.js/issues/91701))
- Turbopack: lazy require metadata and handle TLA
([#&#8203;91705](https://redirect.github.com/vercel/next.js/issues/91705))
- \[turbopack] Respect `{eval:true}` in worker\_threads constructors
([#&#8203;91666](https://redirect.github.com/vercel/next.js/issues/91666))

##### Credits

Huge thanks to
[@&#8203;icyJoseph](https://redirect.github.com/icyJoseph),
[@&#8203;abhishekmardiya](https://redirect.github.com/abhishekmardiya),
[@&#8203;ijjk](https://redirect.github.com/ijjk),
[@&#8203;mischnic](https://redirect.github.com/mischnic),
[@&#8203;unstubbable](https://redirect.github.com/unstubbable),
[@&#8203;sokra](https://redirect.github.com/sokra), and
[@&#8203;lukesandberg](https://redirect.github.com/lukesandberg) for
helping!

###
[`v16.2.0`](https://redirect.github.com/vercel/next.js/compare/v16.1.7...c5c94dffbf084e66b172a9c6ff23d80c24973764)

[Compare
Source](https://redirect.github.com/vercel/next.js/compare/v16.1.7...v16.2.0)

###
[`v16.1.7`](https://redirect.github.com/vercel/next.js/compare/v16.1.6...v16.1.7)

[Compare
Source](https://redirect.github.com/vercel/next.js/compare/v16.1.6...v16.1.7)

</details>

<details>
<summary>vercel/next.js (next)</summary>

###
[`v16.2.1`](https://redirect.github.com/vercel/next.js/compare/v16.2.0...v16.2.1)

[Compare
Source](https://redirect.github.com/vercel/next.js/compare/v16.2.0...v16.2.1)

###
[`v16.2.0`](https://redirect.github.com/vercel/next.js/compare/v16.1.7...c5c94dffbf084e66b172a9c6ff23d80c24973764)

[Compare
Source](https://redirect.github.com/vercel/next.js/compare/v16.1.7...v16.2.0)

###
[`v16.1.7`](https://redirect.github.com/vercel/next.js/compare/v16.1.6...v16.1.7)

[Compare
Source](https://redirect.github.com/vercel/next.js/compare/v16.1.6...v16.1.7)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Summary
- Add fast pre-commit hook (lint-staged: eslint --fix on staged files)
- Add thorough pre-push hook (tsc, eslint, drizzle-kit check, vitest
related)
- Use `.githooks/` with `core.hooksPath`, activated via `pnpm prepare`
- Fix all 105 ESLint errors across 39 files to pass pre-push validation

## Test plan
- [x] `pnpm lint` passes with 0 errors
- [x] `pnpm tsc` passes with 0 errors
- [x] Pre-commit hook runs lint-staged on commit
- [x] Pre-push hook runs full validation before push
- [ ] Verify `pnpm install` activates hooks via `prepare` script on
fresh clone

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added git-based code quality checks that run automatically on commits
and before pushing changes.

* **Bug Fixes**
  * Improved page navigation responsiveness with client-side routing.

* **Refactor**
* Enhanced type safety by replacing generic types with explicit
TypeScript interfaces.
* Optimized component rendering performance through improved dependency
tracking and memoization.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
…312)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [pnpm/action-setup](https://redirect.github.com/pnpm/action-setup) |
action | major | `v4` → `v5` |

---

### Release Notes

<details>
<summary>pnpm/action-setup (pnpm/action-setup)</summary>

###
[`v5`](https://redirect.github.com/pnpm/action-setup/compare/v4...v5)

[Compare
Source](https://redirect.github.com/pnpm/action-setup/compare/v4...v5)

</details>

---

### Configuration

📅 **Schedule**: 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDIuNyIsInVwZGF0ZWRJblZlciI6IjQzLjEwMi43IiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyIsIm1ham9yIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
… v8.57.2 (#316)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint))
| [`8.56.1` →
`8.57.2`](https://renovatebot.com/diffs/npm/typescript-eslint/8.56.1/8.57.2)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/typescript-eslint/8.57.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript-eslint/8.56.1/8.57.2?slim=true)
|

---

### Release Notes

<details>
<summary>typescript-eslint/typescript-eslint
(typescript-eslint)</summary>

###
[`v8.57.2`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8572-2026-03-23)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.57.1...v8.57.2)

This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.2)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

###
[`v8.57.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8571-2026-03-16)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.57.0...v8.57.1)

This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.1)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

###
[`v8.57.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8570-2026-03-09)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.56.1...v8.57.0)

This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.0)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
… v8.58.0 (#317)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint))
| [`8.57.2` →
`8.58.0`](https://renovatebot.com/diffs/npm/typescript-eslint/8.57.2/8.58.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/typescript-eslint/8.58.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript-eslint/8.57.2/8.58.0?slim=true)
|

---

### Release Notes

<details>
<summary>typescript-eslint/typescript-eslint
(typescript-eslint)</summary>

###
[`v8.58.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8580-2026-03-30)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.57.2...v8.58.0)

##### 🚀 Features

- support TypeScript 6
([#&#8203;12124](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12124))

##### ❤️ Thank You

- Evyatar Daud
[@&#8203;StyleShit](https://redirect.github.com/StyleShit)

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.58.0)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [ws](https://redirect.github.com/websockets/ws) | [`8.19.0` →
`8.20.0`](https://renovatebot.com/diffs/npm/ws/8.19.0/8.20.0) |
![age](https://developer.mend.io/api/mc/badges/age/npm/ws/8.20.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ws/8.19.0/8.20.0?slim=true)
|

---

### Release Notes

<details>
<summary>websockets/ws (ws)</summary>

###
[`v8.20.0`](https://redirect.github.com/websockets/ws/releases/tag/8.20.0)

[Compare
Source](https://redirect.github.com/websockets/ws/compare/8.19.0...8.20.0)

### Features

- Added exports for the `PerMessageDeflate` class and utilities for the
`Sec-WebSocket-Extensions` and `Sec-WebSocket-Protocol` headers
([`d3503c1`](https://redirect.github.com/websockets/ws/commit/d3503c1f)).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Summary
- `sp-freesleep` now disables `sleepypod.service` and enables
`free-sleep.service` / `free-sleep-stream.service` so the choice
survives reboots
- `sp-sleepypod` does the reverse — disables free-sleep services and
re-enables sleepypod

Previously both commands only stopped/started services at runtime
without toggling `systemctl enable/disable`, so every reboot reverted to
sleepypod regardless of which mode the user selected.

Fixes #334

## Test plan
- Run `sp-freesleep`, verify free-sleep is active
- Run `systemctl is-enabled sleepypod.service` → should be `disabled`
- Run `systemctl is-enabled free-sleep.service` → should be `enabled`
- Reboot pod → free-sleep should still be running
- Run `sp-sleepypod`, verify sleepypod is active and enabled states are
reversed
- Reboot pod → sleepypod should still be running
## Summary

- **DAC_SOCK_PATH** was being set to `DAC_SOCKET=/deviceinfo/dac.sock`
instead of just the path, because the grep pattern captured the variable
assignment prefix from `frank.sh`. Switched to `sed` extraction and
added path validation.
- **Avahi service file** write fails at runtime because
`ProtectSystem=strict` makes `/etc` read-only. Moved the write to
`scripts/install` (runs as root before systemd sandboxing) and made the
runtime code a graceful fallback.

## Test plan

- [x] Verified on-device: DAC connects successfully after fix
- [x] Verified on-device: Avahi error resolved (service file installed
by installer)
- [x] `sp-logs` shows clean startup with DAC connection and sensor
stream

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added automatic network service advertisement during installation,
enabling system discoverability with version and connectivity
information.

* **Bug Fixes**
* Improved socket path detection with validation to gracefully handle
unsupported configurations.
* Enhanced error handling for read-only filesystem environments with
clear recovery instructions.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [lucide-react](https://lucide.dev)
([source](https://redirect.github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react))
| [`^0.577.0` →
`^1.0.0`](https://renovatebot.com/diffs/npm/lucide-react/0.577.0/1.7.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/1.7.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.577.0/1.7.0?slim=true)
|

---

### Release Notes

<details>
<summary>lucide-icons/lucide (lucide-react)</summary>

###
[`v1.7.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/1.7.0):
Version 1.7.0

[Compare
Source](https://redirect.github.com/lucide-icons/lucide/compare/1.6.0...1.7.0)

#### What's Changed

- fix(lucide-react): Fix dynamic imports by
[@&#8203;ericfennis](https://redirect.github.com/ericfennis) in
[#&#8203;4210](https://redirect.github.com/lucide-icons/lucide/pull/4210)
- feat(icons): added `map-pin-search` icon by
[@&#8203;TonySullivan](https://redirect.github.com/TonySullivan) in
[#&#8203;4125](https://redirect.github.com/lucide-icons/lucide/pull/4125)

#### New Contributors

- [@&#8203;TonySullivan](https://redirect.github.com/TonySullivan) made
their first contribution in
[#&#8203;4125](https://redirect.github.com/lucide-icons/lucide/pull/4125)

**Full Changelog**:
<lucide-icons/lucide@1.6.0...1.7.0>

###
[`v1.6.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/1.6.0):
Version 1.6.0

[Compare
Source](https://redirect.github.com/lucide-icons/lucide/compare/1.5.0...1.6.0)

#### What's Changed

- feat(icons): added `radio-off` icon by
[@&#8203;kongsgard](https://redirect.github.com/kongsgard) in
[#&#8203;4138](https://redirect.github.com/lucide-icons/lucide/pull/4138)

#### New Contributors

- [@&#8203;kongsgard](https://redirect.github.com/kongsgard) made their
first contribution in
[#&#8203;4138](https://redirect.github.com/lucide-icons/lucide/pull/4138)

**Full Changelog**:
<lucide-icons/lucide@1.5.0...1.6.0>

###
[`v1.5.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/1.5.0):
Version 1.5.0

[Compare
Source](https://redirect.github.com/lucide-icons/lucide/compare/1.4.0...1.5.0)

#### What's Changed

- feat(icons): added `beef-off` icon by
[@&#8203;jguddas](https://redirect.github.com/jguddas) in
[#&#8203;3816](https://redirect.github.com/lucide-icons/lucide/pull/3816)

**Full Changelog**:
<lucide-icons/lucide@1.4.0...1.5.0>

###
[`v1.4.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/1.4.0):
Version 1.4.0

[Compare
Source](https://redirect.github.com/lucide-icons/lucide/compare/1.3.0...1.4.0)

#### What's Changed

- feat(icons): added `sport-shoe` icon by
[@&#8203;Youya-ui](https://redirect.github.com/Youya-ui) in
[#&#8203;3953](https://redirect.github.com/lucide-icons/lucide/pull/3953)

#### New Contributors

- [@&#8203;Youya-ui](https://redirect.github.com/Youya-ui) made their
first contribution in
[#&#8203;3953](https://redirect.github.com/lucide-icons/lucide/pull/3953)

**Full Changelog**:
<lucide-icons/lucide@1.3.0...1.4.0>

###
[`v1.3.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/1.3.0):
Version 1.3.0

[Compare
Source](https://redirect.github.com/lucide-icons/lucide/compare/1.2.0...1.3.0)

#### What's Changed

- feat(icons): added `shield-cog` icon by
[@&#8203;KnarliX](https://redirect.github.com/KnarliX) in
[#&#8203;3902](https://redirect.github.com/lucide-icons/lucide/pull/3902)

#### New Contributors

- [@&#8203;KnarliX](https://redirect.github.com/KnarliX) made their
first contribution in
[#&#8203;3902](https://redirect.github.com/lucide-icons/lucide/pull/3902)

**Full Changelog**:
<lucide-icons/lucide@1.2.0...1.3.0>

###
[`v1.2.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/1.2.0):
Version 1.2.0

[Compare
Source](https://redirect.github.com/lucide-icons/lucide/compare/1.1.0...1.2.0)

#### What's Changed

- feat(icons): added `line-style` icon by
[@&#8203;dg-ac](https://redirect.github.com/dg-ac) in
[#&#8203;4030](https://redirect.github.com/lucide-icons/lucide/pull/4030)

#### New Contributors

- [@&#8203;dg-ac](https://redirect.github.com/dg-ac) made their first
contribution in
[#&#8203;4030](https://redirect.github.com/lucide-icons/lucide/pull/4030)

**Full Changelog**:
<lucide-icons/lucide@1.1.0...1.2.0>

###
[`v1.1.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/1.1.0):
Version 1.1.0

[Compare
Source](https://redirect.github.com/lucide-icons/lucide/compare/1.0.1...1.1.0)

#### What's Changed

- fix(astro): add Astro v6 compatibility by
[@&#8203;iseraph-dev](https://redirect.github.com/iseraph-dev) in
[#&#8203;4135](https://redirect.github.com/lucide-icons/lucide/pull/4135)
- fix(packages/lucide-react-native): add preserveModulesRoot to
`lucide-react-native` by
[@&#8203;karsa-mistmere](https://redirect.github.com/karsa-mistmere) in
[#&#8203;4199](https://redirect.github.com/lucide-icons/lucide/pull/4199)
- fix(lucide-preact): add conditional exports map for ESM/CJS resolution
by [@&#8203;coloneljade](https://redirect.github.com/coloneljade) in
[#&#8203;4198](https://redirect.github.com/lucide-icons/lucide/pull/4198)
- fix(scripts): correct import extension in optimizeStagedSvgs.mts by
[@&#8203;jerv](https://redirect.github.com/jerv) in
[#&#8203;4185](https://redirect.github.com/lucide-icons/lucide/pull/4185)
- ci(ci.yml): Fix release flow by
[@&#8203;ericfennis](https://redirect.github.com/ericfennis) in
[#&#8203;4193](https://redirect.github.com/lucide-icons/lucide/pull/4193)
- fix(icons): changed `arrow-big-*` icon by
[@&#8203;jguddas](https://redirect.github.com/jguddas) in
[#&#8203;3527](https://redirect.github.com/lucide-icons/lucide/pull/3527)
- fix(icons): changed `signpost` icon by
[@&#8203;jguddas](https://redirect.github.com/jguddas) in
[#&#8203;3531](https://redirect.github.com/lucide-icons/lucide/pull/3531)
- fix(github/workflows): revert release workflow & add
--fail-if-no-match by
[@&#8203;karsa-mistmere](https://redirect.github.com/karsa-mistmere) in
[#&#8203;4201](https://redirect.github.com/lucide-icons/lucide/pull/4201)
- fix(icons): changed `circle-user-round` icon by
[@&#8203;karsa-mistmere](https://redirect.github.com/karsa-mistmere) in
[#&#8203;4165](https://redirect.github.com/lucide-icons/lucide/pull/4165)
- feat(icons): added `road` icon by
[@&#8203;uibalint](https://redirect.github.com/uibalint) in
[#&#8203;3014](https://redirect.github.com/lucide-icons/lucide/pull/3014)

#### New Contributors

- [@&#8203;iseraph-dev](https://redirect.github.com/iseraph-dev) made
their first contribution in
[#&#8203;4135](https://redirect.github.com/lucide-icons/lucide/pull/4135)
- [@&#8203;coloneljade](https://redirect.github.com/coloneljade) made
their first contribution in
[#&#8203;4198](https://redirect.github.com/lucide-icons/lucide/pull/4198)
- [@&#8203;jerv](https://redirect.github.com/jerv) made their first
contribution in
[#&#8203;4185](https://redirect.github.com/lucide-icons/lucide/pull/4185)
- [@&#8203;uibalint](https://redirect.github.com/uibalint) made their
first contribution in
[#&#8203;3014](https://redirect.github.com/lucide-icons/lucide/pull/3014)

**Full Changelog**:
<lucide-icons/lucide@1.0.2...1.1.0>

###
[`v1.0.1`](https://redirect.github.com/lucide-icons/lucide/releases/tag/1.0.1):
Lucide V1 🚀

[Compare
Source](https://redirect.github.com/lucide-icons/lucide/compare/1.0.0...1.0.1)

After years of work and dedication, Lucide Version 1 has been officially
**released**!. This milestone marks a significant achievement in our
journey to provide a comprehensive and versatile icon library for
developers and designers alike.

It's been quite a ride — especially over the past year. Lucide has grown
to over 30 million downloads per week and is used by million of projects
worldwide. This release is a testament to the hard work of our community
and contributors who have helped shape Lucide into what it is today.

Thank you to everyone who has supported us along the way. We couldn't
have done this without you!

#### What's New in Version 1? TLDR;

- Removed brand icons, see our [brand logo
statement](/brand-logo-statement) for more details.
- Improved documentation, guides per framework.
- Improved accessibility, `aria-hidden` is now set by default on icons.
- Removed UMD build, only ESM and CJS now (exception for the
[`lucide`](../guide/lucide/index.md) package).
- Package rename from `lucide-vue-next` to `@lucide/vue`.
- A modern, standalone implementation for Angular, `@lucide/angular`
- Support for context providers in React, Vue, Svelte, and Solid.
- Stable code points for Lucide font.
- Support for shadow DOM in the `lucide` package.
- Many bug fixes and improvements.

See more at [Lucide Version 1](https://lucide.dev/guide/version-1)

###
[`v1.0.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/1.0.0):
Version 1.0.0

[Compare
Source](https://redirect.github.com/lucide-icons/lucide/compare/0.577.0...1.0.0)

> \[!WARNING]
> This release was published unintentionally. We've corrected this in
[v1.0.1](https://redirect.github.com/lucide-icons/lucide/releases/tag/1.0.1),
which should be used instead.

#### What's Changed

- docs(api): Update nitro to latest version by
[@&#8203;ericfennis](https://redirect.github.com/ericfennis) in
[#&#8203;4102](https://redirect.github.com/lucide-icons/lucide/pull/4102)
- chore(icons): Add 'crypto' tag to bitcoin.json by
[@&#8203;cwlowder](https://redirect.github.com/cwlowder) in
[#&#8203;4120](https://redirect.github.com/lucide-icons/lucide/pull/4120)
- fix(docs): fix incorrect Angular integration example for lucide-lab by
[@&#8203;bhavberi](https://redirect.github.com/bhavberi) in
[#&#8203;4101](https://redirect.github.com/lucide-icons/lucide/pull/4101)
- fix(redirects): Fixes icon alias redirects on site by
[@&#8203;ericfennis](https://redirect.github.com/ericfennis) in
[#&#8203;4122](https://redirect.github.com/lucide-icons/lucide/pull/4122)
- fix(icons): changed `school` icon by
[@&#8203;jguddas](https://redirect.github.com/jguddas) in
[#&#8203;4124](https://redirect.github.com/lucide-icons/lucide/pull/4124)
- chore(deps): bump simple-git from 3.30.0 to 3.32.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;4133](https://redirect.github.com/lucide-icons/lucide/pull/4133)
- docs(svelte): clarify Svelte 4 vs Svelte 5 Lucide packages by
[@&#8203;bhavberi](https://redirect.github.com/bhavberi) in
[#&#8203;4107](https://redirect.github.com/lucide-icons/lucide/pull/4107)
- docs(site): add strapi lucide icons package by
[@&#8203;shx08](https://redirect.github.com/shx08) in
[#&#8203;4112](https://redirect.github.com/lucide-icons/lucide/pull/4112)
- docs: add rule about consistent use of shapes by
[@&#8203;jguddas](https://redirect.github.com/jguddas) in
[#&#8203;3975](https://redirect.github.com/lucide-icons/lucide/pull/3975)
- fix(icons): changed `gpu` icon by
[@&#8203;jguddas](https://redirect.github.com/jguddas) in
[#&#8203;4147](https://redirect.github.com/lucide-icons/lucide/pull/4147)
- chore(deps-dev): bump h3 from 1.15.4 to 1.15.6 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;4163](https://redirect.github.com/lucide-icons/lucide/pull/4163)
- fix(lucide-fonts): correct icon mappings in index.html and
unicode.html by
[@&#8203;buyuan-dev](https://redirect.github.com/buyuan-dev) in
[#&#8203;4160](https://redirect.github.com/lucide-icons/lucide/pull/4160)
- style(icons): fix formatting of `<svg>` element in two icons that were
inconsistent by
[@&#8203;LukasKalbertodt](https://redirect.github.com/LukasKalbertodt)
in
[#&#8203;4166](https://redirect.github.com/lucide-icons/lucide/pull/4166)
- Update ICON\_GUIDELINES link in CONTRIBUTING.md by
[@&#8203;AntoninKadrmas](https://redirect.github.com/AntoninKadrmas) in
[#&#8203;4187](https://redirect.github.com/lucide-icons/lucide/pull/4187)
- feat(icons): added `cctv-off` icon by
[@&#8203;rrod497](https://redirect.github.com/rrod497) in
[#&#8203;4162](https://redirect.github.com/lucide-icons/lucide/pull/4162)

#### New Contributors

- [@&#8203;cwlowder](https://redirect.github.com/cwlowder) made their
first contribution in
[#&#8203;4120](https://redirect.github.com/lucide-icons/lucide/pull/4120)
- [@&#8203;shx08](https://redirect.github.com/shx08) made their first
contribution in
[#&#8203;4112](https://redirect.github.com/lucide-icons/lucide/pull/4112)
- [@&#8203;buyuan-dev](https://redirect.github.com/buyuan-dev) made
their first contribution in
[#&#8203;4160](https://redirect.github.com/lucide-icons/lucide/pull/4160)
- [@&#8203;LukasKalbertodt](https://redirect.github.com/LukasKalbertodt)
made their first contribution in
[#&#8203;4166](https://redirect.github.com/lucide-icons/lucide/pull/4166)
- [@&#8203;AntoninKadrmas](https://redirect.github.com/AntoninKadrmas)
made their first contribution in
[#&#8203;4187](https://redirect.github.com/lucide-icons/lucide/pull/4187)
- [@&#8203;rrod497](https://redirect.github.com/rrod497) made their
first contribution in
[#&#8203;4162](https://redirect.github.com/lucide-icons/lucide/pull/4162)

**Full Changelog**:
<lucide-icons/lucide@0.577.0...1.0.0>

</details>

---

### Configuration

📅 **Schedule**: 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDIuNyIsInVwZGF0ZWRJblZlciI6IjQzLjEwMi43IiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyIsIm1ham9yIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [jsdom](https://redirect.github.com/jsdom/jsdom) | [`^28.0.0` →
`^29.0.0`](https://renovatebot.com/diffs/npm/jsdom/28.1.0/29.0.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/jsdom/29.0.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jsdom/28.1.0/29.0.1?slim=true)
|

---

### Release Notes

<details>
<summary>jsdom/jsdom (jsdom)</summary>

###
[`v29.0.1`](https://redirect.github.com/jsdom/jsdom/compare/v29.0.0...v29.0.1)

[Compare
Source](https://redirect.github.com/jsdom/jsdom/compare/v29.0.0...v29.0.1)

###
[`v29.0.0`](https://redirect.github.com/jsdom/jsdom/blob/HEAD/Changelog.md#2900)

[Compare
Source](https://redirect.github.com/jsdom/jsdom/compare/v28.1.0...v29.0.0)

Breaking changes:

- Node.js v22.13.0+ is now the minimum supported v22 version (was
v22.12.0+).

Other changes:

- Overhauled the CSSOM implementation, replacing the
[`@acemir/cssom`](https://www.npmjs.com/package/@&#8203;acemir/cssom)
and [`cssstyle`](https://redirect.github.com/jsdom/cssstyle)
dependencies with fresh internal implementations built on webidl2js
wrappers and the [`css-tree`](https://www.npmjs.com/package/css-tree)
parser. Serialization, parsing, and API behavior is improved in various
ways, especially around edge cases.
- Added `CSSCounterStyleRule` and `CSSNamespaceRule` to jsdom `Window`s.
- Added `cssMediaRule.matches` and `cssSupportsRule.matches` getters.
- Added proper media query parsing in `MediaList`, using `css-tree`
instead of naive comma-splitting. Invalid queries become `"not all"` per
spec.
- Added `cssKeyframeRule.keyText` getter/setter validation.
- Added `cssStyleRule.selectorText` setter validation: invalid selectors
are now rejected.
- Added `styleSheet.ownerNode`, `styleSheet.href`, and
`styleSheet.title`.
- Added bad port blocking per the [fetch
specification](https://fetch.spec.whatwg.org/#bad-port), preventing
fetches to commonly-abused ports.
- Improved `Document` initialization performance by lazily initializing
the CSS selector engine, avoiding \~0.5 ms of overhead per `Document`.
(thypon)
- Fixed a memory leak when stylesheets were removed from the document.
- Fixed `CSSStyleDeclaration` modifications to properly trigger custom
element reactions.
- Fixed nested `@media` rule parsing.
- Fixed `CSSStyleSheet`'s "disallow modification" flag not being checked
in all mutation methods.
- Fixed `XMLHttpRequest`'s `response` getter returning parsed JSON
during the `LOADING` state instead of `null`.
- Fixed `getComputedStyle()` crashing in XHTML documents when
stylesheets contained at-rules such as `@page` or `@font-face`.
- Fixed a potential hang in synchronous `XMLHttpRequest` caused by a
race condition with the worker thread's idle timeout.

</details>

---

### Configuration

📅 **Schedule**: 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [shadcn](https://redirect.github.com/shadcn-ui/ui)
([source](https://redirect.github.com/shadcn-ui/ui/tree/HEAD/packages/shadcn))
| [`^3.8.5` →
`^4.0.0`](https://renovatebot.com/diffs/npm/shadcn/3.8.5/4.1.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/shadcn/4.1.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/shadcn/3.8.5/4.1.1?slim=true)
|

---

### Release Notes

<details>
<summary>shadcn-ui/ui (shadcn)</summary>

###
[`v4.1.1`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#411)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@4.1.0...shadcn@4.1.1)

##### Patch Changes

- [#&#8203;10202](https://redirect.github.com/shadcn-ui/ui/pull/10202)
[`12b49c986fcf7e6db9be7f515df6142f822f2236`](https://redirect.github.com/shadcn-ui/ui/commit/12b49c986fcf7e6db9be7f515df6142f822f2236)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - fix
packageManager in package.json

###
[`v4.1.0`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#410)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@4.0.8...shadcn@4.1.0)

##### Minor Changes

- [#&#8203;10115](https://redirect.github.com/shadcn-ui/ui/pull/10115)
[`687f09817b614a3450f0f56779edf367082e1e53`](https://redirect.github.com/shadcn-ui/ui/commit/687f09817b614a3450f0f56779edf367082e1e53)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
fontHeading to presets

- [#&#8203;10115](https://redirect.github.com/shadcn-ui/ui/pull/10115)
[`687f09817b614a3450f0f56779edf367082e1e53`](https://redirect.github.com/shadcn-ui/ui/commit/687f09817b614a3450f0f56779edf367082e1e53)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
chartColor

###
[`v4.0.8`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#408)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@4.0.7...shadcn@4.0.8)

##### Patch Changes

- [#&#8203;10041](https://redirect.github.com/shadcn-ui/ui/pull/10041)
[`a97ebe54f1824032d8ad00d1d0c079e3dc6f52d7`](https://redirect.github.com/shadcn-ui/ui/commit/a97ebe54f1824032d8ad00d1d0c079e3dc6f52d7)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - Bundle
[@&#8203;antfu/ni](https://redirect.github.com/antfu/ni) and tinyexec to
fix missing module error with npx

###
[`v4.0.7`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#407)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@4.0.6...shadcn@4.0.7)

##### Patch Changes

- [#&#8203;9929](https://redirect.github.com/shadcn-ui/ui/pull/9929)
[`f9b365bc7f9d591c995952976711dbdd7b1bc45a`](https://redirect.github.com/shadcn-ui/ui/commit/f9b365bc7f9d591c995952976711dbdd7b1bc45a)
Thanks [@&#8203;kapishdima](https://redirect.github.com/kapishdima)! -
add dependency field to registry:font

###
[`v4.0.6`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#406)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@4.0.5...shadcn@4.0.6)

##### Patch Changes

- [#&#8203;10022](https://redirect.github.com/shadcn-ui/ui/pull/10022)
[`7e93eb81ea8160c06c86f98bb6bfeb1ddfd0d237`](https://redirect.github.com/shadcn-ui/ui/commit/7e93eb81ea8160c06c86f98bb6bfeb1ddfd0d237)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - ensure
monorepo respect package manager

###
[`v4.0.5`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#405)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@4.0.4...shadcn@4.0.5)

##### Patch Changes

- [#&#8203;9960](https://redirect.github.com/shadcn-ui/ui/pull/9960)
[`5ee456735377158c12cf55eefbe872f7303e1325`](https://redirect.github.com/shadcn-ui/ui/commit/5ee456735377158c12cf55eefbe872f7303e1325)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - update
handling of init urls

###
[`v4.0.4`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#404)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@4.0.3...shadcn@4.0.4)

##### Patch Changes

- [#&#8203;9957](https://redirect.github.com/shadcn-ui/ui/pull/9957)
[`aa841e35cf405e574123478b46f4058cff0e179a`](https://redirect.github.com/shadcn-ui/ui/commit/aa841e35cf405e574123478b46f4058cff0e179a)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - fix cache
in resolveRegistryBaseConfig

###
[`v4.0.3`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#403)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@4.0.2...shadcn@4.0.3)

##### Patch Changes

- [#&#8203;9950](https://redirect.github.com/shadcn-ui/ui/pull/9950)
[`ce2c3ca688916db4fdb5fe173e9c6902f78696ed`](https://redirect.github.com/shadcn-ui/ui/commit/ce2c3ca688916db4fdb5fe173e9c6902f78696ed)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
support for translucent menu

###
[`v4.0.2`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#402)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@4.0.1...shadcn@4.0.2)

##### Patch Changes

- [#&#8203;9903](https://redirect.github.com/shadcn-ui/ui/pull/9903)
[`f5ac4a0d2aa5af87202f67558a4b9b8f92c00bd2`](https://redirect.github.com/shadcn-ui/ui/commit/f5ac4a0d2aa5af87202f67558a4b9b8f92c00bd2)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - scaffold
templates from github remote

###
[`v4.0.1`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#401)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@4.0.0...shadcn@4.0.1)

##### Patch Changes

- [#&#8203;9896](https://redirect.github.com/shadcn-ui/ui/pull/9896)
[`1ce9c2dd6a3d16422a6586e39632ebbccc45d3a4`](https://redirect.github.com/shadcn-ui/ui/commit/1ce9c2dd6a3d16422a6586e39632ebbccc45d3a4)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - fix apple
metadata files in template

- [#&#8203;9897](https://redirect.github.com/shadcn-ui/ui/pull/9897)
[`5edf9c95b7d13dcbd325aa4cf6b48d58a53b07c6`](https://redirect.github.com/shadcn-ui/ui/commit/5edf9c95b7d13dcbd325aa4cf6b48d58a53b07c6)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - fix
fallback style resolving issue

###
[`v4.0.0`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#400)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@3.8.5...shadcn@4.0.0)

##### Major Changes

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`605246f93b8c0c56eee0c1b25ccaa526e5cbdc1d`](https://redirect.github.com/shadcn-ui/ui/commit/605246f93b8c0c56eee0c1b25ccaa526e5cbdc1d)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
--monorepo flag and monorepo support for vite, start and react-router

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`da10396f2b9b248c23bef05234ce222b0868ace4`](https://redirect.github.com/shadcn-ui/ui/commit/da10396f2b9b248c23bef05234ce222b0868ace4)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add new
base colors: mauve, olive, mist and taupe

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`ce1f9259bfe043b3105350a3357249458ac41a1b`](https://redirect.github.com/shadcn-ui/ui/commit/ce1f9259bfe043b3105350a3357249458ac41a1b)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - added
`--preset` flag to `init` command

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`642d802eeef86a01a861de20e6da851cd3d8c974`](https://redirect.github.com/shadcn-ui/ui/commit/642d802eeef86a01a861de20e6da851cd3d8c974)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - use
multiplicative instead of addition for --radius calc

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`b9b30a23e644c952fbe52db337bfdd427bc6449f`](https://redirect.github.com/shadcn-ui/ui/commit/b9b30a23e644c952fbe52db337bfdd427bc6449f)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
shadcn/skills

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`642d802eeef86a01a861de20e6da851cd3d8c974`](https://redirect.github.com/shadcn-ui/ui/commit/642d802eeef86a01a861de20e6da851cd3d8c974)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - deprecate
--base-color, --src-dir, --no-base-style flags

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`3bc23a60c7c825647265bca0942c330d1e93fcaa`](https://redirect.github.com/shadcn-ui/ui/commit/3bc23a60c7c825647265bca0942c330d1e93fcaa)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - deprecate
create and make it an alias of init

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`fae5e7829263d80eb4b19bdcc9b8ea595060b837`](https://redirect.github.com/shadcn-ui/ui/commit/fae5e7829263d80eb4b19bdcc9b8ea595060b837)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add astro
template support

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`4bdd23291c499159098e2b2e27b738041a514558`](https://redirect.github.com/shadcn-ui/ui/commit/4bdd23291c499159098e2b2e27b738041a514558)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
--reinstall flag for init

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`4fa2ef66ed6e99a02ea4524e45568440968a6c27`](https://redirect.github.com/shadcn-ui/ui/commit/4fa2ef66ed6e99a02ea4524e45568440968a6c27)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
shadcn docs command

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`642d802eeef86a01a861de20e6da851cd3d8c974`](https://redirect.github.com/shadcn-ui/ui/commit/642d802eeef86a01a861de20e6da851cd3d8c974)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
--base to shadcn init

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`642d802eeef86a01a861de20e6da851cd3d8c974`](https://redirect.github.com/shadcn-ui/ui/commit/642d802eeef86a01a861de20e6da851cd3d8c974)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - deprecate
--css-variables flag from shadcn add

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`0d3f6a0812c51b36a6c7618e3b9eadd758860321`](https://redirect.github.com/shadcn-ui/ui/commit/0d3f6a0812c51b36a6c7618e3b9eadd758860321)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - deprecate
registry:build and registry:mcp

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`4307815c0fa7576668e1d39999a284e350dbfc66`](https://redirect.github.com/shadcn-ui/ui/commit/4307815c0fa7576668e1d39999a284e350dbfc66)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
preset code support

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`5f9691670188b5b411f84d16ca7db2693c922155`](https://redirect.github.com/shadcn-ui/ui/commit/5f9691670188b5b411f84d16ca7db2693c922155)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - refactor
shadcn info command to output llm-friendly output

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`642d802eeef86a01a861de20e6da851cd3d8c974`](https://redirect.github.com/shadcn-ui/ui/commit/642d802eeef86a01a861de20e6da851cd3d8c974)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - refactor
ordering of updaters

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`646f884e8fddd196cff3e118184733522516193d`](https://redirect.github.com/shadcn-ui/ui/commit/646f884e8fddd196cff3e118184733522516193d)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
--dry-run, --diff and --view to the add command

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`642d802eeef86a01a861de20e6da851cd3d8c974`](https://redirect.github.com/shadcn-ui/ui/commit/642d802eeef86a01a861de20e6da851cd3d8c974)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! -
getTailwindCssFile fallback to config.tailwind.css

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`642d802eeef86a01a861de20e6da851cd3d8c974`](https://redirect.github.com/shadcn-ui/ui/commit/642d802eeef86a01a861de20e6da851cd3d8c974)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
support for hooks, lib and ui install for workspaces

##### Patch Changes

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`4a96d95bde1bb2e692e61808ccc6b9c8e00676f4`](https://redirect.github.com/shadcn-ui/ui/commit/4a96d95bde1bb2e692e61808ccc6b9c8e00676f4)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - fix kbd
display in tooltip

- [#&#8203;9804](https://redirect.github.com/shadcn-ui/ui/pull/9804)
[`2ddd920e4d7c251eb96c88398b98bfe1f6ea0b8a`](https://redirect.github.com/shadcn-ui/ui/commit/2ddd920e4d7c251eb96c88398b98bfe1f6ea0b8a)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - warn if
in monorepo and cwd not set

- [#&#8203;9708](https://redirect.github.com/shadcn-ui/ui/pull/9708)
[`82f03d0f1dd12efb5395a0b8689533588d778d0c`](https://redirect.github.com/shadcn-ui/ui/commit/82f03d0f1dd12efb5395a0b8689533588d778d0c)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - handling
of apply directive inside utility

</details>

---

### Configuration

📅 **Schedule**: 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDIuNyIsInVwZGF0ZWRJblZlciI6IjQzLjEwMi43IiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyIsIm1ham9yIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Summary

- Pod 4 (Python 3.10) and Pod 3 (Python 3.9) Yocto images lack
`plistlib.py` and `pyexpat.so` in the stdlib, which breaks `ensurepip`
and causes `python3 -m venv` to fail silently
- All 4 biometrics modules (piezo-processor, sleep-detector,
environment-monitor, calibrator) are skipped with `Warning: python3-venv
not available`
- Extracted venv setup into `scripts/setup-python-venv` so it's reusable
and independently testable for future pod versions
- Falls back to `--without-pip` + `get-pip.py` bootstrap when
`ensurepip` is unavailable

Reference: `throwaway31265/free-sleep` `install_python_packages.sh` for
the root cause analysis (missing stdlib modules in Yocto builds).

## Test plan

- [ ] Verify on Pod 4: `scripts/setup-python-venv /tmp/test-venv`
creates a working venv with pip
- [ ] Verify on Pod 5: normal `python3 -m venv` path still works (no
regression)
- [ ] Full install on Pod 4: all 4 biometrics modules install and start
- [ ] `sp-update` on Pod 4: module venvs created correctly on update
path

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
* Refactored Python virtual environment provisioning to use a dedicated
setup script during initial installation and module updates.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[eslint-config-next](https://nextjs.org/docs/app/api-reference/config/eslint)
([source](https://redirect.github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next))
| [`16.2.1` →
`16.2.2`](https://renovatebot.com/diffs/npm/eslint-config-next/16.2.1/16.2.2)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-config-next/16.2.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-config-next/16.2.1/16.2.2?slim=true)
|
| [next](https://nextjs.org)
([source](https://redirect.github.com/vercel/next.js)) | [`16.2.1` →
`16.2.2`](https://renovatebot.com/diffs/npm/next/16.2.1/16.2.2) |
![age](https://developer.mend.io/api/mc/badges/age/npm/next/16.2.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/next/16.2.1/16.2.2?slim=true)
|

---

### Release Notes

<details>
<summary>vercel/next.js (eslint-config-next)</summary>

###
[`v16.2.2`](https://redirect.github.com/vercel/next.js/compare/v16.2.1...v16.2.2)

[Compare
Source](https://redirect.github.com/vercel/next.js/compare/v16.2.1...v16.2.2)

</details>

<details>
<summary>vercel/next.js (next)</summary>

###
[`v16.2.2`](https://redirect.github.com/vercel/next.js/compare/v16.2.1...v16.2.2)

[Compare
Source](https://redirect.github.com/vercel/next.js/compare/v16.2.1...v16.2.2)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDIuMTEiLCJ1cGRhdGVkSW5WZXIiOiI0My4xMDIuMTEiLCJ0YXJnZXRCcmFuY2giOiJkZXYiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwiZml4LXBhdGNoIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Summary

- Extract DAC socket detection into `scripts/pod/detect`
- Extract iptables helpers into `scripts/lib/iptables-helpers`
- Move all CLI tools from inline heredocs into `scripts/bin/sp-*`
- Add `sp-uninstall` for clean removal
- CLI tools read `DAC_SOCK_PATH` from `.env` at runtime

Closes #338
Supersedes #339

## Test plan

- [x] `bash -n` and `shellcheck` pass on all scripts
- [x] Deployed to Pod 5 — all commands verified working
- [x] `sp-restart` reads DAC_SOCK_PATH from `.env`
- [x] `sp-freesleep` / `sp-sleepypod` switch and persist correctly
## Summary

Fixes install failure on fresh firmware resets reported by a Pod 4 user.
After #341 extracted pod detection into `scripts/pod/detect`, the
install script broke when fetched from `dev` without `--branch dev`:

```
curl -fsSL https://raw.githubusercontent.com/sleepypod/core/dev/scripts/install | sudo bash
```

**Root cause**: `DOWNLOAD_BRANCH` defaulted to `"main"` (line 321), so
the script downloaded the `main` tarball — which doesn't have
`scripts/pod/detect` yet. The dev-branch install script then failed at
line 390:

```
bash: line 390: /home/dac/sleepypod-core/scripts/pod/detect: No such file or directory
```

**Device**: Pod 4 (Eight Pod), fresh firmware reset, confirmed
`scripts/pod/` missing from extracted tarball contents on disk.

## Changes

- Add `SCRIPT_DEFAULT_BRANCH="dev"` constant — download branch now
defaults to match the script's own branch instead of hardcoded `"main"`
- Guard `source scripts/pod/detect` — clear error message with recovery
instructions if the file is missing (cross-version mismatch safety)
- Guard `scripts/bin/` CLI tools loop — skip gracefully if directory
doesn't exist

> **Note**: When merging to `main`, update `SCRIPT_DEFAULT_BRANCH` to
`"main"`.

## Test plan

- [ ] On a Pod 4 with reset firmware, run `curl -fsSL
.../dev/scripts/install | sudo bash` — should download dev tarball and
detect pod generation
- [ ] Verify `--branch main` override still works: `curl ... | sudo bash
-s -- --branch main`
- [ ] Confirm existing `--branch dev` explicit usage still works

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Improved installation validation with clearer error messages when
dependencies are missing
* Installation process now gracefully handles missing components and
provides informative feedback instead of cryptic failures
* CLI tools installation only proceeds when prerequisites are available

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary

Biometrics module installation fails on Pod 3/4 because Python venv
creation fails — even with the `--without-pip` + `get-pip.py` fallback
from #336. The Yocto image is missing too many stdlib modules for any
pip bootstrapping to work.

**New approach**: patch the system Python stdlib *before* creating
venvs. Downloads the matching CPython source and copies any missing
`.py` files into the system lib directory (non-destructive, skips
existing files). After patching, `ensurepip` works natively and normal
`python3 -m venv` succeeds.

## Changes

- **`scripts/patch-python-stdlib`** (new) — detects Python version,
downloads matching CPython source tarball, fills in missing stdlib `.py`
files. Idempotent, verbose logging with `[patch-python-stdlib]` prefix
for easy debugging. No-ops on Pod 5+ where stdlib is already complete.
- **`scripts/install`** — calls `patch-python-stdlib` once before the
biometrics module loop
- **`scripts/setup-python-venv`** — simplified with proper logging.
Normal venv path should now always work after stdlib patching.
`--without-pip` fallback kept as safety net.

## Logging

All scripts use tagged prefixes (`[patch-python-stdlib]`,
`[setup-python-venv]`) so users can share install logs and we can
pinpoint failures:

```
[patch-python-stdlib] Detected Python 3.10.4
[patch-python-stdlib] System lib directory: /usr/lib64/python3.10
[patch-python-stdlib] Module 'plistlib' is missing — patching needed
[patch-python-stdlib] Downloading CPython 3.10.4 source...
[patch-python-stdlib] Stdlib patching complete: 147 copied, 312 already present, 0 failed
[patch-python-stdlib]   ✓ plistlib
[patch-python-stdlib]   ✓ ensurepip
[patch-python-stdlib] Python stdlib is ready for venv creation
```

## Test plan

- [ ] On Pod 4 (fresh firmware reset): run install, confirm
`patch-python-stdlib` downloads CPython source and copies missing files
- [ ] Confirm all 4 biometrics modules install successfully after
patching
- [ ] On Pod 5: confirm `patch-python-stdlib` no-ops ("no patching
needed")
- [ ] Re-run install on already-patched Pod 4: confirm idempotent
(skips, no re-download... actually it will re-download since it checks
imports not file presence — acceptable for now)
- [ ] Have user share install log if issues persist
## Summary
- Fix `podModelName()` in `HealthCircle.tsx` using wrong hardware
revision codes (sequential H00–H03) instead of actual `PodVersion` enum
values (H00, I00, J00)
- Pod 4 (I00) was falling through to default and showing raw code; Pod 3
(H00) was labeled "Pod 5"

Closes #349

## Test plan
- [ ] Verify on Pod 3 (H00) → displays "Pod 3"
- [ ] Verify on Pod 4 (I00) → displays "Pod 4"
- [ ] Verify on Pod 5 (J00) → displays "Pod 5"

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **Bug Fixes**
* Corrected pod model name mappings to ensure users see accurate product
identification information. Updates provide improved consistency in how
device models are labeled throughout the application's status monitoring
features. This helps users quickly identify their device models and
understand model-specific capabilities when reviewing device health
indicators and operational status information within the platform.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- **Backend**: Replaced hardcoded `/usr/sbin/iptables` with dynamic path
resolution that checks `/sbin/` then `/usr/sbin/`, falling back to bare
name for PATH lookup. Fixes the UI toggle error on Pod 4.
- **Script**: Replaced `dpkg`/`apt-get` install block in
`scripts/internet-control` with a simple `command -v iptables` check,
since Yocto has no package manager — iptables is baked into the image.

Closes #350

## Test plan
- [ ] Deploy to Pod 4 and toggle WAN access from the UI — should succeed
without error
- [ ] Run `sudo ./scripts/internet-control block` on Pod 4 — should
block without dpkg/apt errors
- [ ] Run `sudo ./scripts/internet-control status` — verify Layer 1
shows ACTIVE
- [ ] Verify on a Debian-based dev machine that `/usr/sbin/iptables` is
still resolved correctly

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* More robust installer: clearer errors when required files are missing,
safer defaults, and skips absent CLI tools to avoid failures.
* Network control now exits with an error if required system utilities
are missing instead of attempting automatic installation.
* Improved resolution of system binary paths for more reliable behavior
across environments.

* **Tests**
* CI now validates that installer branch configuration matches the PR
base branch.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
ng and others added 24 commits April 5, 2026 20:30
## Summary

- Replace Python `venv` + `pip` with [uv](https://docs.astral.sh/uv/)
for biometrics module environment setup — fixes Pod 3 install failure
where missing `pyexpat` C extension broke both `ensurepip` and
`get-pip.py`
- Add `pyproject.toml` + `uv.lock` per module, delete `requirements.txt`
- Delete `scripts/patch-python-stdlib` and `scripts/setup-python-venv`
(no longer needed)
- Update service files from `venv/` to `.venv/` (uv default)
- Include `CI=true` on `pnpm install` for `curl | bash` TTY fix
- ADR 0017 documents the decision

Based on the approach from #381 by @onemec.

Closes #380

## Test plan

> **Note:** Feature branches don't have CI releases, so `--branch
<feature>` would download a source tarball without `.next` and try to
build on-pod (OOM risk). Use `scripts/deploy` from a dev machine
instead.

**From your dev machine:**

```bash
./scripts/deploy <pod-ip> fix/380-uv-python-env
```

**Or, if you already have a working install on the pod:**

```bash
cd /home/dac/sleepypod-core
git fetch origin fix/380-uv-python-env
git checkout fix/380-uv-python-env
bash scripts/install --local --no-ssh
```

### Pod 5 results (verified via fresh install)

| Check | Result |
|-------|--------|
| uv installed | `/usr/local/bin/uv` 0.11.3 (musl-static) |
| sleepypod | active |
| piezo-processor | active |
| sleep-detector | active |
| environment-monitor | active |
| calibrator | active |
| `.venv` dirs | 4/4 created |
| Old `venv/` dirs | cleaned up |
| DBs | intact |

Tested as a completely clean install (removed `/home/dac/sleepypod-core`
and `/opt/sleepypod/modules` first). All services started on first
attempt.

### Still needs testing

- [ ] Pod 3 — the original reporter's device (@onemec)
- [ ] Pod 4
- [x] Pod 5 — verified via fresh install
- [ ] `sp-update` path (uv already present, modules synced on update)

---------

Co-authored-by: onemec <onemec@users.noreply.github.com>
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [python](https://python.org)
([source](https://redirect.github.com/python/cpython)) | requires-python
| minor | `>=3.9,<3.11` → `>=3.14,<3.15` |

---

### Release Notes

<details>
<summary>python/cpython (python)</summary>

###
[`v3.14.3`](https://redirect.github.com/python/cpython/compare/v3.14.2...v3.14.3)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.14.2...v3.14.3)

###
[`v3.14.2`](https://redirect.github.com/python/cpython/compare/v3.14.1...v3.14.2)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.14.1...v3.14.2)

###
[`v3.14.1`](https://redirect.github.com/python/cpython/compare/v3.14.0...v3.14.1)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.14.0...v3.14.1)

###
[`v3.14.0`](https://redirect.github.com/python/cpython/compare/v3.13.9...v3.14.0)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.12...v3.14.0)

###
[`v3.13.12`](https://redirect.github.com/python/cpython/compare/v3.13.11...v3.13.12)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.11...v3.13.12)

###
[`v3.13.11`](https://redirect.github.com/python/cpython/compare/v3.13.10...v3.13.11)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.10...v3.13.11)

###
[`v3.13.10`](https://redirect.github.com/python/cpython/compare/v3.13.9...v3.13.10)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.9...v3.13.10)

###
[`v3.13.9`](https://redirect.github.com/python/cpython/compare/v3.13.8...v3.13.9)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.8...v3.13.9)

###
[`v3.13.8`](https://redirect.github.com/python/cpython/compare/v3.13.7...v3.13.8)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.7...v3.13.8)

###
[`v3.13.7`](https://redirect.github.com/python/cpython/compare/v3.13.6...v3.13.7)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.6...v3.13.7)

###
[`v3.13.6`](https://redirect.github.com/python/cpython/compare/v3.13.5...v3.13.6)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.5...v3.13.6)

###
[`v3.13.5`](https://redirect.github.com/python/cpython/compare/v3.13.4...v3.13.5)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.4...v3.13.5)

###
[`v3.13.4`](https://redirect.github.com/python/cpython/compare/v3.13.3...v3.13.4)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.3...v3.13.4)

###
[`v3.13.3`](https://redirect.github.com/python/cpython/compare/v3.13.2...v3.13.3)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.2...v3.13.3)

###
[`v3.13.2`](https://redirect.github.com/python/cpython/compare/v3.13.1...v3.13.2)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.1...v3.13.2)

###
[`v3.13.1`](https://redirect.github.com/python/cpython/compare/v3.13.0...v3.13.1)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.13.0...v3.13.1)

###
[`v3.13.0`](https://redirect.github.com/python/cpython/compare/v3.12.12...v3.13.0)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.13...v3.13.0)

###
[`v3.12.13`](https://redirect.github.com/python/cpython/compare/v3.12.12...v3.12.13)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.12...v3.12.13)

###
[`v3.12.12`](https://redirect.github.com/python/cpython/compare/v3.12.11...v3.12.12)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.11...v3.12.12)

###
[`v3.12.11`](https://redirect.github.com/python/cpython/compare/v3.12.10...v3.12.11)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.10...v3.12.11)

###
[`v3.12.10`](https://redirect.github.com/python/cpython/compare/v3.12.9...v3.12.10)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.9...v3.12.10)

###
[`v3.12.9`](https://redirect.github.com/python/cpython/compare/v3.12.8...v3.12.9)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.8...v3.12.9)

###
[`v3.12.8`](https://redirect.github.com/python/cpython/compare/v3.12.7...v3.12.8)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.7...v3.12.8)

###
[`v3.12.7`](https://redirect.github.com/python/cpython/compare/v3.12.6...v3.12.7)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.6...v3.12.7)

###
[`v3.12.6`](https://redirect.github.com/python/cpython/compare/v3.12.5...v3.12.6)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.5...v3.12.6)

###
[`v3.12.5`](https://redirect.github.com/python/cpython/compare/v3.12.4...v3.12.5)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.4...v3.12.5)

###
[`v3.12.4`](https://redirect.github.com/python/cpython/compare/v3.12.3...v3.12.4)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.3...v3.12.4)

###
[`v3.12.3`](https://redirect.github.com/python/cpython/compare/v3.12.2...v3.12.3)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.2...v3.12.3)

###
[`v3.12.2`](https://redirect.github.com/python/cpython/compare/v3.12.1...v3.12.2)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.1...v3.12.2)

###
[`v3.12.1`](https://redirect.github.com/python/cpython/compare/v3.12.0...v3.12.1)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.12.0...v3.12.1)

###
[`v3.12.0`](https://redirect.github.com/python/cpython/compare/v3.11.14...v3.12.0)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.15...v3.12.0)

###
[`v3.11.15`](https://redirect.github.com/python/cpython/compare/v3.11.14...v3.11.15)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.14...v3.11.15)

###
[`v3.11.14`](https://redirect.github.com/python/cpython/compare/v3.11.13...v3.11.14)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.13...v3.11.14)

###
[`v3.11.13`](https://redirect.github.com/python/cpython/compare/v3.11.12...v3.11.13)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.12...v3.11.13)

###
[`v3.11.12`](https://redirect.github.com/python/cpython/compare/v3.11.11...v3.11.12)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.11...v3.11.12)

###
[`v3.11.11`](https://redirect.github.com/python/cpython/compare/v3.11.10...v3.11.11)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.10...v3.11.11)

###
[`v3.11.10`](https://redirect.github.com/python/cpython/compare/v3.11.9...v3.11.10)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.9...v3.11.10)

###
[`v3.11.9`](https://redirect.github.com/python/cpython/compare/v3.11.8...v3.11.9)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.8...v3.11.9)

###
[`v3.11.8`](https://redirect.github.com/python/cpython/compare/v3.11.7...v3.11.8)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.7...v3.11.8)

###
[`v3.11.7`](https://redirect.github.com/python/cpython/compare/v3.11.6...v3.11.7)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.6...v3.11.7)

###
[`v3.11.6`](https://redirect.github.com/python/cpython/compare/v3.11.5...v3.11.6)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.5...v3.11.6)

###
[`v3.11.5`](https://redirect.github.com/python/cpython/compare/v3.11.4...v3.11.5)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.4...v3.11.5)

###
[`v3.11.4`](https://redirect.github.com/python/cpython/compare/v3.11.3...v3.11.4)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.3...v3.11.4)

###
[`v3.11.3`](https://redirect.github.com/python/cpython/compare/v3.11.2...v3.11.3)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.2...v3.11.3)

###
[`v3.11.2`](https://redirect.github.com/python/cpython/compare/v3.11.1...v3.11.2)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.1...v3.11.2)

###
[`v3.11.1`](https://redirect.github.com/python/cpython/compare/v3.11.0...v3.11.1)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.11.0...v3.11.1)

###
[`v3.11.0`](https://redirect.github.com/python/cpython/compare/v3.10.19...v3.11.0)

[Compare
Source](https://redirect.github.com/python/cpython/compare/v3.10.20...v3.11.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Summary

- Revert Renovate bot's `requires-python` bump from `>=3.14,<3.15` back
to `>=3.9,<3.11` (PR #385 broke all pods)
- Add `--python python3` to `uv sync` in install and sp-update — forces
uv to use the system Python instead of downloading one
- Add Renovate rule to cap `requires-python` at `<3.11` (Pod 3 is 3.9,
Pod 4/5 is 3.10)

## Root cause

Renovate auto-merged #385 which bumped `requires-python` to
`>=3.14,<3.15`. This caused `uv sync` to download CPython 3.14.3, which
has no pre-built wheels for numpy/scipy/contourpy on aarch64. It then
tried to compile from source, which failed because Yocto has no C++
compiler.

## Test plan

- [ ] `sp-update dev` on Pod 4 (@punkmaniac) — should use system Python
3.10, not download 3.14
- [x] Pod 5 — previously verified with `>=3.9,<3.11` + system Python
3.10.4

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Expanded Python version compatibility across all modules to support
Python 3.9-3.10
* Updated dependency management configuration with explicit Python
version constraints
* Enhanced environment setup scripts with explicit Python interpreter
specification

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- Incremental wiki compile: adds Python/uv environment section to
deployment topic from ADR 0017
- Updates INDEX (22 sources), schema (deployment description), and
compile log

## Test plan
- [x] Wiki renders correctly (markdown valid)
- [x] Cross-references intact (links to biometrics-system topic)
…query to v5.96.2 (#391)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@tanstack/react-query](https://tanstack.com/query)
([source](https://redirect.github.com/TanStack/query/tree/HEAD/packages/react-query))
| [`5.96.1` →
`5.96.2`](https://renovatebot.com/diffs/npm/@tanstack%2freact-query/5.96.1/5.96.2)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@tanstack%2freact-query/5.96.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tanstack%2freact-query/5.96.1/5.96.2?slim=true)
|

---

### Release Notes

<details>
<summary>TanStack/query (@&#8203;tanstack/react-query)</summary>

###
[`v5.96.2`](https://redirect.github.com/TanStack/query/blob/HEAD/packages/react-query/CHANGELOG.md#5962)

[Compare
Source](https://redirect.github.com/TanStack/query/compare/@tanstack/react-query@5.96.1...@tanstack/react-query@5.96.2)

##### Patch Changes

- Updated dependencies \[]:
-
[@&#8203;tanstack/query-core](https://redirect.github.com/tanstack/query-core)@&#8203;5.96.2

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDIuMTEiLCJ1cGRhdGVkSW5WZXIiOiI0My4xMDIuMTEiLCJ0YXJnZXRCcmFuY2giOiJkZXYiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwiZml4LXBhdGNoIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Summary
- ExecStart used bare `node` which resolves to `/usr/bin/node` (Yocto's
v16) instead of `/usr/local/bin/node` (v22 installed by the script)
- Causes 500 errors on startup — Next.js 16 uses syntax unsupported by
Node 16
- Also sets `PATH` in the unit so any child processes resolve correctly

## Test plan
- [x] Verified on Pod: bare `node` → v16 → 500; `/usr/local/bin/node` →
v22 → working
- [ ] Fresh install on Pod confirms service starts with correct Node
version

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Improved service startup reliability by ensuring proper resolution of
system dependencies required for the application to run successfully.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`25.5.0` →
`25.5.2`](https://renovatebot.com/diffs/npm/@types%2fnode/25.5.0/25.5.2)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/25.5.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/25.5.0/25.5.2?slim=true)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDIuMTEiLCJ1cGRhdGVkSW5WZXIiOiI0My4xMDIuMTEiLCJ0YXJnZXRCcmFuY2giOiJkZXYiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwiZml4LXBhdGNoIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [dotenv](https://redirect.github.com/motdotla/dotenv) | [`17.4.0` →
`17.4.1`](https://renovatebot.com/diffs/npm/dotenv/17.4.0/17.4.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/dotenv/17.4.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/dotenv/17.4.0/17.4.1?slim=true)
|

---

### Release Notes

<details>
<summary>motdotla/dotenv (dotenv)</summary>

###
[`v17.4.1`](https://redirect.github.com/motdotla/dotenv/blob/HEAD/CHANGELOG.md#1741-2026-04-05)

[Compare
Source](https://redirect.github.com/motdotla/dotenv/compare/v17.4.0...v17.4.1)

##### Changed

- Change text `injecting` to `injected`
([#&#8203;1005](https://redirect.github.com/motdotla/dotenv/pull/1005))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…po to v5.9.5 (#399)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@lingui/babel-plugin-lingui-macro](https://lingui.dev)
([source](https://redirect.github.com/lingui/js-lingui/tree/HEAD/packages/babel-plugin-lingui-macro))
| [`5.9.4` →
`5.9.5`](https://renovatebot.com/diffs/npm/@lingui%2fbabel-plugin-lingui-macro/5.9.4/5.9.5)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@lingui%2fbabel-plugin-lingui-macro/5.9.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lingui%2fbabel-plugin-lingui-macro/5.9.4/5.9.5?slim=true)
|
| [@lingui/cli](https://lingui.dev)
([source](https://redirect.github.com/lingui/js-lingui/tree/HEAD/packages/cli))
| [`5.9.4` →
`5.9.5`](https://renovatebot.com/diffs/npm/@lingui%2fcli/5.9.4/5.9.5) |
![age](https://developer.mend.io/api/mc/badges/age/npm/@lingui%2fcli/5.9.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lingui%2fcli/5.9.4/5.9.5?slim=true)
|
| [@lingui/core](https://lingui.dev)
([source](https://redirect.github.com/lingui/js-lingui/tree/HEAD/packages/core))
| [`5.9.4` →
`5.9.5`](https://renovatebot.com/diffs/npm/@lingui%2fcore/5.9.4/5.9.5) |
![age](https://developer.mend.io/api/mc/badges/age/npm/@lingui%2fcore/5.9.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lingui%2fcore/5.9.4/5.9.5?slim=true)
|
| [@lingui/loader](https://lingui.dev)
([source](https://redirect.github.com/lingui/js-lingui/tree/HEAD/packages/loader))
| [`5.9.4` →
`5.9.5`](https://renovatebot.com/diffs/npm/@lingui%2floader/5.9.4/5.9.5)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@lingui%2floader/5.9.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lingui%2floader/5.9.4/5.9.5?slim=true)
|
| [@lingui/macro](https://lingui.dev)
([source](https://redirect.github.com/lingui/js-lingui/tree/HEAD/packages/macro))
| [`5.9.4` →
`5.9.5`](https://renovatebot.com/diffs/npm/@lingui%2fmacro/5.9.4/5.9.5)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@lingui%2fmacro/5.9.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lingui%2fmacro/5.9.4/5.9.5?slim=true)
|
| [@lingui/react](https://lingui.dev)
([source](https://redirect.github.com/lingui/js-lingui/tree/HEAD/packages/react))
| [`5.9.4` →
`5.9.5`](https://renovatebot.com/diffs/npm/@lingui%2freact/5.9.4/5.9.5)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@lingui%2freact/5.9.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lingui%2freact/5.9.4/5.9.5?slim=true)
|
| [@lingui/vite-plugin](https://lingui.dev)
([source](https://redirect.github.com/lingui/js-lingui/tree/HEAD/packages/vite-plugin))
| [`5.9.4` →
`5.9.5`](https://renovatebot.com/diffs/npm/@lingui%2fvite-plugin/5.9.4/5.9.5)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@lingui%2fvite-plugin/5.9.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lingui%2fvite-plugin/5.9.4/5.9.5?slim=true)
|

---

### Release Notes

<details>
<summary>lingui/js-lingui
(@&#8203;lingui/babel-plugin-lingui-macro)</summary>

###
[`v5.9.5`](https://redirect.github.com/lingui/js-lingui/blob/HEAD/packages/babel-plugin-lingui-macro/CHANGELOG.md#595-2026-04-06)

[Compare
Source](https://redirect.github.com/lingui/js-lingui/compare/v5.9.4...v5.9.5)

**Note:** Version bump only for package
[@&#8203;lingui/babel-plugin-lingui-macro](https://redirect.github.com/lingui/babel-plugin-lingui-macro)

</details>

<details>
<summary>lingui/js-lingui (@&#8203;lingui/cli)</summary>

###
[`v5.9.5`](https://redirect.github.com/lingui/js-lingui/blob/HEAD/packages/cli/CHANGELOG.md#595-2026-04-06)

[Compare
Source](https://redirect.github.com/lingui/js-lingui/compare/v5.9.4...v5.9.5)

##### Bug Fixes

- support braces in catalog pathname
([#&#8203;2495](https://redirect.github.com/lingui/js-lingui/issues/2495))
([db14681](https://redirect.github.com/lingui/js-lingui/commit/db14681e36ae1603499fafbd2dd00942ed1c2e0b))

</details>

<details>
<summary>lingui/js-lingui (@&#8203;lingui/core)</summary>

###
[`v5.9.5`](https://redirect.github.com/lingui/js-lingui/blob/HEAD/packages/core/CHANGELOG.md#595-2026-04-06)

[Compare
Source](https://redirect.github.com/lingui/js-lingui/compare/v5.9.4...v5.9.5)

**Note:** Version bump only for package
[@&#8203;lingui/core](https://redirect.github.com/lingui/core)

</details>

<details>
<summary>lingui/js-lingui (@&#8203;lingui/loader)</summary>

###
[`v5.9.5`](https://redirect.github.com/lingui/js-lingui/blob/HEAD/packages/loader/CHANGELOG.md#595-2026-04-06)

[Compare
Source](https://redirect.github.com/lingui/js-lingui/compare/v5.9.4...v5.9.5)

**Note:** Version bump only for package
[@&#8203;lingui/loader](https://redirect.github.com/lingui/loader)

</details>

<details>
<summary>lingui/js-lingui (@&#8203;lingui/macro)</summary>

###
[`v5.9.5`](https://redirect.github.com/lingui/js-lingui/blob/HEAD/packages/macro/CHANGELOG.md#595-2026-04-06)

[Compare
Source](https://redirect.github.com/lingui/js-lingui/compare/v5.9.4...v5.9.5)

**Note:** Version bump only for package
[@&#8203;lingui/macro](https://redirect.github.com/lingui/macro)

</details>

<details>
<summary>lingui/js-lingui (@&#8203;lingui/react)</summary>

###
[`v5.9.5`](https://redirect.github.com/lingui/js-lingui/blob/HEAD/packages/react/CHANGELOG.md#595-2026-04-06)

[Compare
Source](https://redirect.github.com/lingui/js-lingui/compare/v5.9.4...v5.9.5)

**Note:** Version bump only for package
[@&#8203;lingui/react](https://redirect.github.com/lingui/react)

</details>

<details>
<summary>lingui/js-lingui (@&#8203;lingui/vite-plugin)</summary>

###
[`v5.9.5`](https://redirect.github.com/lingui/js-lingui/blob/HEAD/packages/vite-plugin/CHANGELOG.md#595-2026-04-06)

[Compare
Source](https://redirect.github.com/lingui/js-lingui/compare/v5.9.4...v5.9.5)

**Note:** Version bump only for package
[@&#8203;lingui/vite-plugin](https://redirect.github.com/lingui/vite-plugin)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [jsdom](https://redirect.github.com/jsdom/jsdom) | [`29.0.1` →
`29.0.2`](https://renovatebot.com/diffs/npm/jsdom/29.0.1/29.0.2) |
![age](https://developer.mend.io/api/mc/badges/age/npm/jsdom/29.0.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jsdom/29.0.1/29.0.2?slim=true)
|

---

### Release Notes

<details>
<summary>jsdom/jsdom (jsdom)</summary>

###
[`v29.0.2`](https://redirect.github.com/jsdom/jsdom/releases/tag/v29.0.2)

[Compare
Source](https://redirect.github.com/jsdom/jsdom/compare/v29.0.1...v29.0.2)

- Significantly improved and sped up `getComputedStyle()`. Computed
value rules are now applied across a broader set of properties, and
include fixes related to inheritance, defaulting keywords, custom
properties, and color-related values such as `currentcolor` and system
colors. ([@&#8203;asamuzaK](https://redirect.github.com/asamuzaK))
- Fixed CSS `'background`' and `'border'` shorthand parsing.
([@&#8203;asamuzaK](https://redirect.github.com/asamuzaK))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@vitest/coverage-v8](https://vitest.dev/guide/coverage)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8))
| [`4.1.2` →
`4.1.3`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-v8/4.1.2/4.1.3)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fcoverage-v8/4.1.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fcoverage-v8/4.1.2/4.1.3?slim=true)
|
| [vitest](https://vitest.dev)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest))
| [`4.1.2` →
`4.1.3`](https://renovatebot.com/diffs/npm/vitest/4.1.2/4.1.3) |
![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/4.1.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/4.1.2/4.1.3?slim=true)
|

---

### Release Notes

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/coverage-v8)</summary>

###
[`v4.1.3`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.3)

[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.2...v4.1.3)

#####    🚀 Experimental Features

- Add `experimental.preParse` flag  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;10070](https://redirect.github.com/vitest-dev/vitest/issues/10070)
[<samp>(78273)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7827363bd)
- Support `browser.locators.exact` option  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;10013](https://redirect.github.com/vitest-dev/vitest/issues/10013)
[<samp>(48799)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/487990a19)
- Add `TestAttachment.bodyEncoding`  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#&#8203;9969](https://redirect.github.com/vitest-dev/vitest/issues/9969)
[<samp>(89ca0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/89ca0e254)
- Support custom snapshot matcher  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa), **Claude
Sonnet 4.6** and **Codex** in
[#&#8203;9973](https://redirect.github.com/vitest-dev/vitest/issues/9973)
[<samp>(59b0e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/59b0e6411)

#####    🐞 Bug Fixes

- Advance fake timers with `expect.poll` interval  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Sonnet 4.6** in
[#&#8203;10022](https://redirect.github.com/vitest-dev/vitest/issues/10022)
[<samp>(3f5bf)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3f5bfa365)
- Add `@vitest/coverage-v8` and `@vitest/coverage-istanbul` as optional
dependency  -  by
[@&#8203;alan-agius4](https://redirect.github.com/alan-agius4) in
[#&#8203;10025](https://redirect.github.com/vitest-dev/vitest/issues/10025)
[<samp>(146d4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/146d4f0a0)
- Fix `defineHelper` for webkit async stack trace + update playwright
1.59.0  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa)
in
[#&#8203;10036](https://redirect.github.com/vitest-dev/vitest/issues/10036)
[<samp>(5a5fa)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5a5fa49fe)
- Fix suite hook throwing errors for unused auto test-scoped fixture  - 
by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Sonnet 4.6** in
[#&#8203;10035](https://redirect.github.com/vitest-dev/vitest/issues/10035)
[<samp>(39865)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/398657e8d)
- **expect**:
- Remove `JestExtendError.context` from verbose error reporting  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#&#8203;9983](https://redirect.github.com/vitest-dev/vitest/issues/9983)
[<samp>(66751)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/66751c9e8)
- Don't leak "runner" types  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;10004](https://redirect.github.com/vitest-dev/vitest/issues/10004)
[<samp>(ec204)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ec2045543)
- **snapshot**:
- Fix flagging obsolete snapshots for snapshot properties mismatch  - 
by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Sonnet 4.6** in
[#&#8203;9986](https://redirect.github.com/vitest-dev/vitest/issues/9986)
[<samp>(6b869)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6b869156b)
- Export custom snapshot matcher helper from `vitest`  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Codex**
in
[#&#8203;10042](https://redirect.github.com/vitest-dev/vitest/issues/10042)
[<samp>(691d3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/691d341fd)
- **ui**:
- Don't leak vite types  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;10005](https://redirect.github.com/vitest-dev/vitest/issues/10005)
[<samp>(fdff1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fdff1bf9a)
- **vm**:
- Fix external module resolve error with deps optimizer query  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Sonnet 4.6** in
[#&#8203;10024](https://redirect.github.com/vitest-dev/vitest/issues/10024)
[<samp>(9dbf4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9dbf47786)

#####     [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.2...v4.1.3)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Summary
- Add optional `unit` param (F/C, default F) to `device.getStatus`,
`schedules.getAll`, and `schedules.getByDay`
- When `unit=C`, temperatures are converted from Fahrenheit (native
storage) to Celsius using `toC` from tempUtils
- Follows the pattern established by the environment router

## Test plan
- [x] Added Celsius conversion tests for getAll and getByDay covering
all 3 schedule types (temperature, power, alarm)
- [x] Typecheck passes
- [x] 20/20 schedule tests pass
- [ ] Manual: call `GET /schedules?side=left&unit=C` and verify
temperatures are in Celsius

Closes #333

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **New Features**
* Temperature unit selection now available for device status queries
(Fahrenheit or Celsius; defaults to Fahrenheit)
* Temperature unit selection now available for schedule queries
(Fahrenheit or Celsius; defaults to Fahrenheit)
* Temperatures are automatically converted to the requested unit with
single decimal precision

* **Tests**
* Added test coverage for temperature unit conversion across device and
schedule endpoints

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- Create `.node-version` (22) referenced by all 5 workflows for
consistent Node version
- Fix `actions/checkout@v6` → `@v4` and `actions/setup-node@v6` → `@v4`
(v6 doesn't exist)
- Fix `actions/upload-artifact@v7` → `@v4`
- Use `xargs -d '\n'` in lint task to handle filenames with spaces
- Add `BIOMETRICS_DATABASE_URL` to `.env.dev` and `.env.prod` templates

## Test plan
- [ ] CI workflows run successfully with pinned Node 22
- [ ] Lint task handles filenames with spaces correctly
- [x] YAML syntax validated

Closes #328

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Introduced biometrics database configuration for development and
production environments.

* **Chores**
  * Updated GitHub Actions workflow versions across CI/CD pipelines.
* Standardized Node.js version management via centralized configuration
file.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- Replaced `Promise.all` wrapping synchronous better-sqlite3/drizzle
queries with sequential `.all()` calls in `getAll` and `getByDay`
handlers
- better-sqlite3 is synchronous and single-connection — `Promise.all`
provided no parallelism, only a false suggestion of concurrency

Closes #201

## Test plan
- [x] TypeScript type check passes
- [x] All 9 schedules tests pass
- [ ] Manual: verify `getAll` and `getByDay` endpoints return correct
data

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Optimized internal query execution for schedule data retrieval to
improve performance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
## Summary
- Device settings fallback in `getAll` was missing LED-related fields
(`ledNightModeEnabled`, `ledDayBrightness`, `ledNightBrightness`,
`ledNightStartTime`, `ledNightEndTime`)
- When no `device_settings` row exists, the incomplete default object
caused mobile client decode failures

Closes #142

## Test plan
- [x] TypeScript type check passes
- [x] All 16 router tests pass
- [ ] Manual: delete device_settings row, call `GET /settings`, verify
all LED fields present with defaults

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## New Features
* Added LED night mode configuration settings to device settings,
including options to enable/disable night mode, set day and night
brightness levels (0-100), and configure customizable night mode start
and end times.
* LED setting changes now automatically trigger scheduler updates to
apply new configurations.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Research document covering hardware teardowns, network recon commands,
full protocol analysis (PubNub legacy + AWS IoT MQTT current), pysnoo2
and python-snoo source deep dives, and local server replacement
architecture options.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [shadcn](https://redirect.github.com/shadcn-ui/ui)
([source](https://redirect.github.com/shadcn-ui/ui/tree/HEAD/packages/shadcn))
| [`4.1.2` →
`4.2.0`](https://renovatebot.com/diffs/npm/shadcn/4.1.2/4.2.0) |
![age](https://developer.mend.io/api/mc/badges/age/npm/shadcn/4.2.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/shadcn/4.1.2/4.2.0?slim=true)
|

---

### Release Notes

<details>
<summary>shadcn-ui/ui (shadcn)</summary>

###
[`v4.2.0`](https://redirect.github.com/shadcn-ui/ui/blob/HEAD/packages/shadcn/CHANGELOG.md#420)

[Compare
Source](https://redirect.github.com/shadcn-ui/ui/compare/shadcn@4.1.2...shadcn@4.2.0)

##### Minor Changes

- [#&#8203;10313](https://redirect.github.com/shadcn-ui/ui/pull/10313)
[`c1e29824cd7a6809448e45b6b7fe8f7be71ecb0f`](https://redirect.github.com/shadcn-ui/ui/commit/c1e29824cd7a6809448e45b6b7fe8f7be71ecb0f)
Thanks [@&#8203;shadcn](https://redirect.github.com/shadcn)! - add
shadcn apply command

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMTAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjExMC4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyIsIm1pbm9yIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
… v8.58.1 (#418)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint))
| [`8.58.0` →
`8.58.1`](https://renovatebot.com/diffs/npm/typescript-eslint/8.58.0/8.58.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/typescript-eslint/8.58.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript-eslint/8.58.0/8.58.1?slim=true)
|

---

### Release Notes

<details>
<summary>typescript-eslint/typescript-eslint
(typescript-eslint)</summary>

###
[`v8.58.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8581-2026-04-08)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.58.0...v8.58.1)

This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.58.1)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Summary
- Replace misleading `Promise.all` with sequential `.all()` calls in
health router drift detection — mirrors the fix applied to schedules.ts
in #400
- Replace `z.any()` with concrete Zod output schema for settings
`getAll` endpoint — prevents missing-field regressions like the one
fixed in #401

## Test plan
- [x] TypeScript compiles clean (`tsc --noEmit`)
- [x] Lint passes (pre-commit hook)
- [ ] Verify `/health/system` endpoint returns drift detection data
correctly
- [ ] Verify `/settings` endpoint returns full settings payload without
validation errors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Reorganized health monitoring detection to execute database queries
sequentially, improving monitoring consistency.

* **Chores**
* Added stricter validation schemas for settings API responses to ensure
type safety and consistency across device settings, gesture controls,
and side-specific configurations.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[eslint-config-next](https://nextjs.org/docs/app/api-reference/config/eslint)
([source](https://redirect.github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next))
| [`16.2.2` →
`16.2.3`](https://renovatebot.com/diffs/npm/eslint-config-next/16.2.2/16.2.3)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-config-next/16.2.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-config-next/16.2.2/16.2.3?slim=true)
|
| [next](https://nextjs.org)
([source](https://redirect.github.com/vercel/next.js)) | [`16.2.2` →
`16.2.3`](https://renovatebot.com/diffs/npm/next/16.2.2/16.2.3) |
![age](https://developer.mend.io/api/mc/badges/age/npm/next/16.2.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/next/16.2.2/16.2.3?slim=true)
|

---

### Release Notes

<details>
<summary>vercel/next.js (eslint-config-next)</summary>

###
[`v16.2.3`](https://redirect.github.com/vercel/next.js/compare/v16.2.2...v16.2.3)

[Compare
Source](https://redirect.github.com/vercel/next.js/compare/v16.2.2...v16.2.3)

</details>

<details>
<summary>vercel/next.js (next)</summary>

###
[`v16.2.3`](https://redirect.github.com/vercel/next.js/compare/v16.2.2...v16.2.3)

[Compare
Source](https://redirect.github.com/vercel/next.js/compare/v16.2.2...v16.2.3)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [react](https://react.dev/)
([source](https://redirect.github.com/facebook/react/tree/HEAD/packages/react))
| [`19.2.4` →
`19.2.5`](https://renovatebot.com/diffs/npm/react/19.2.4/19.2.5) |
![age](https://developer.mend.io/api/mc/badges/age/npm/react/19.2.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react/19.2.4/19.2.5?slim=true)
|
| [react-dom](https://react.dev/)
([source](https://redirect.github.com/facebook/react/tree/HEAD/packages/react-dom))
| [`19.2.4` →
`19.2.5`](https://renovatebot.com/diffs/npm/react-dom/19.2.4/19.2.5) |
![age](https://developer.mend.io/api/mc/badges/age/npm/react-dom/19.2.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-dom/19.2.4/19.2.5?slim=true)
|

---

### Release Notes

<details>
<summary>facebook/react (react)</summary>

###
[`v19.2.5`](https://redirect.github.com/facebook/react/releases/tag/v19.2.5):
19.2.5 (April 8th, 2026)

[Compare
Source](https://redirect.github.com/facebook/react/compare/v19.2.4...v19.2.5)

##### React Server Components

- Add more cycle protections
([#&#8203;36236](https://redirect.github.com/facebook/react/pull/36236)
by [@&#8203;eps1lon](https://redirect.github.com/eps1lon) and
[@&#8203;unstubbable](https://redirect.github.com/unstubbable))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@vitest/coverage-v8](https://vitest.dev/guide/coverage)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8))
| [`4.1.3` →
`4.1.4`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-v8/4.1.3/4.1.4)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fcoverage-v8/4.1.4?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fcoverage-v8/4.1.3/4.1.4?slim=true)
|
| [vitest](https://vitest.dev)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest))
| [`4.1.3` →
`4.1.4`](https://renovatebot.com/diffs/npm/vitest/4.1.3/4.1.4) |
![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/4.1.4?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/4.1.3/4.1.4?slim=true)
|

---

### Release Notes

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/coverage-v8)</summary>

###
[`v4.1.4`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.4)

[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4)

#####    🚀 Features

- **coverage**:
- Default to text reporter `skipFull` if agent detected  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#&#8203;10018](https://redirect.github.com/vitest-dev/vitest/issues/10018)
[<samp>(53757)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/53757804c)
- **experimental**:
- Expose `assertion` as a public field  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;10095](https://redirect.github.com/vitest-dev/vitest/issues/10095)
[<samp>(a120e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a120e3ab8)
- Support aria snapshot  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa), **Claude Opus
4.6 (1M context)**,
[@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio), **Codex**
and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;9668](https://redirect.github.com/vitest-dev/vitest/issues/9668)
[<samp>(d4fbb)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d4fbb5cc9)
- **reporter**:
- Add filterMeta option to json reporter  -  by
[@&#8203;nami8824](https://redirect.github.com/nami8824) and
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;10078](https://redirect.github.com/vitest-dev/vitest/issues/10078)
[<samp>(b77de)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b77de968e)

#####    🐞 Bug Fixes

- Use "black" foreground for labeled terminal message to ensure contrast
 -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#&#8203;10076](https://redirect.github.com/vitest-dev/vitest/issues/10076)
[<samp>(203f0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/203f07af7)
- Make `expect(..., message)` consistent as error message prefix  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Codex**
in
[#&#8203;10068](https://redirect.github.com/vitest-dev/vitest/issues/10068)
[<samp>(a1b5f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a1b5f0f4f)
- Do not hoist imports whose names match class properties .  -  by
[@&#8203;SunsetFi](https://redirect.github.com/SunsetFi) in
[#&#8203;10093](https://redirect.github.com/vitest-dev/vitest/issues/10093)
and
[#&#8203;10094](https://redirect.github.com/vitest-dev/vitest/issues/10094)
[<samp>(0fc4b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0fc4b47e0)
- **browser**: Spread user server options into browser Vite server in
project  -  by
[@&#8203;GoldStrikeArch](https://redirect.github.com/GoldStrikeArch) in
[#&#8203;10049](https://redirect.github.com/vitest-dev/vitest/issues/10049)
[<samp>(65c9d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/65c9d55eb)

#####     [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sleepypod/core).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…query to v5.97.0 (#423)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@tanstack/react-query](https://tanstack.com/query)
([source](https://redirect.github.com/TanStack/query/tree/HEAD/packages/react-query))
| [`5.96.2` →
`5.97.0`](https://renovatebot.com/diffs/npm/@tanstack%2freact-query/5.96.2/5.97.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@tanstack%2freact-query/5.97.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tanstack%2freact-query/5.96.2/5.97.0?slim=true)
|

---

### Release Notes

<details>
<summary>TanStack/query (@&#8203;tanstack/react-query)</summary>

###
[`v5.97.0`](https://redirect.github.com/TanStack/query/blob/HEAD/packages/react-query/CHANGELOG.md#5970)

[Compare
Source](https://redirect.github.com/TanStack/query/compare/@tanstack/react-query@5.96.2...@tanstack/react-query@5.97.0)

##### Patch Changes

- Updated dependencies
\[[`2bfb12c`](https://redirect.github.com/TanStack/query/commit/2bfb12cc44f1d8495106136e4ddacb817135f8f9)]:
-
[@&#8203;tanstack/query-core](https://redirect.github.com/tanstack/query-core)@&#8203;5.97.0

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sleepypod/core).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMTAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjExMC4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyIsIm1pbm9yIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Summary
- New `ScheduleWeekOverview` component showing days grouped by identical
temperature set points
- Mini SVG sparklines with color-coded temperature dots for each group
- Collapsible section integrated into SchedulePage between day selector
and curve presets
- Tap a group to select those days for bulk editing
- Grouping utility in `src/lib/scheduleGrouping.ts`

Closes #256

## Test plan
- [ ] Verify week overview shows correct groupings when multiple days
share a curve
- [ ] Verify "No schedule" shown for unscheduled days
- [ ] Tap a group — verify days are selected for editing
- [ ] Verify collapsed by default, expands on click

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

# Release Notes

* **New Features**
  * Multi-day schedule editing with week overview and group management
* Schedule activity indicator in navigation showing next scheduled time
* Set points management drawer for easier temperature schedule
configuration
  * Interactive curve visualization with point selection

* **UI/UX Improvements**
  * Redesigned temperature set point cards for improved readability
  * Enhanced schedule controls displaying affected day count
  * Improved confirmation feedback styling

* **Chores**
  * Integrated issue tracking system with Git hook automation
  * Updated development workflow documentation
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 13, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: bec6da6f-ec64-4db8-8814-10f972b33856

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

ng added 2 commits April 12, 2026 23:53
## Summary

- Replace the hardcoded `SCRIPT_DEFAULT_BRANCH="main"` / `"dev"` in
`scripts/install` with a `__BRANCH__` placeholder.
- Both release workflows (`release.yml` on `main`, `dev-release.yml` on
`dev`) now run a `sed` step before tarballing to substitute `__BRANCH__`
with `github.ref_name`.
- Remove the now-unnecessary "Validate install script branch default"
gate from `build.yml` — the source file no longer holds a real branch
name, so there's nothing for CI to validate.

This supersedes the manual dev→main flip of `SCRIPT_DEFAULT_BRANCH` that
was required before every release merge. The shipped tarball still
contains the correct branch; it's just stamped in at build time now
instead of being tracked in git.

## Test plan

- [ ] Merge to dev → `dev-release.yml` runs, extract the tarball's
`scripts/install`, confirm `SCRIPT_DEFAULT_BRANCH="dev"`.
- [ ] Merge dev → main → `release.yml` runs, confirm tarball's
`scripts/install` has `SCRIPT_DEFAULT_BRANCH="main"`.
- [ ] Confirm `build.yml` no longer has the validate step and PR checks
still pass.
@ng ng merged commit 36c2fb8 into main Apr 13, 2026
@github-actions
Copy link
Copy Markdown

🎉 This PR is included in version 1.6.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant