Skip to content

Conversation

@sairon
Copy link
Member

@sairon sairon commented Nov 3, 2025

Summary by CodeRabbit

  • New Features

    • Improved startup resilience in CLI with emergency console and interactive fallback
  • Bug Fixes

    • Updated Linux kernel to 6.12.51 across all supported boards for stability and security
    • Added USB storage quirks for improved device compatibility
    • Enhanced restart configuration for service reliability
  • Chores

    • Hardened GitHub Actions workflows with pinned commit references
    • Updated board kernel configurations and modules
    • Improved build system messaging controls

sairon and others added 30 commits August 28, 2025 16:53
…4267)

Upstream commit [1] caused regression in IPv4 routing which can cause some
routes becoming broadcast even though they should be routed as unicast, e.g.:

 # ip route get 1.1.1.1
 broadcast 1.1.1.1 via 192.168.122.1 dev enp0s3 src 192.168.122.204 uid 0
     cache <local,brd>

It's not entirely clear yet why it happens but this behavior seems to be
triggered for instance when the SSDP integration sends the broadcast packet on
HA startup. While this behavior is not described in the regression report [1],
the commit cherry-picked from Linux master fixes the problems for us as well.

Patches moved to version-specific folder, as this one shouldn't be applied on
Raspberry Pi targets.

[1] https://lore.kernel.org/all/[email protected]/
[2] https://lore.kernel.org/stable/[email protected]/

Fixes #4265
#4277)

This reverts commit 194b914.

Stable commit eb0abacdd3fce5a19fffc1c8bd0be6ffffeb59d8 in v6.12.44 does the
same.
Bumps [actions/stale](https://github.com/actions/stale) from 9.1.0 to 10.0.0.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](actions/stale@v9.1.0...v10.0.0)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: 10.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 8.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](actions/github-script@v7...v8)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Enable Pressure Stall Information PSI for more accurate detection of resource shortages.

The psi feature identifies and quantifies the disruptions caused by CPU, memory or IO  resource shortages and the time impact it has on complex workloads or even entire systems.

- https://facebookmicrosites.github.io/psi/docs/overview
- https://www.kernel.org/doc/html/latest/accounting/psi.html
Use the --cidfile Docker CLI argument when starting the container and
bind-mount the generated file containing full ID of the container to the
container itself.

Using --mount instead of --volume is needed, as --volume is racy and creates
empty directory volume at the destination path instead.

This is prerequisite for home-assistant/supervisor#6006 but can come handy for
other cases too.
The extra information printed when using the top-level makefile can clutter the
output when it needs to be further processed, e.g. when running
`make show-info | jq`. Make it respect the --silent flag (which also suppresses
messages about changing directories which would break parsing as well).
* buildroot 49cc269143...9acb31819a (1):
  > Merge tag '2025.02.6' into 2025.02.x-haos
The URL in os-release still pointed to hass.io domain which is currently
defunct. Point to the Home Assistant's main homepage instead.

Fixes #4295
Needed to allow multi-touch gestures on touchscreens for the addon HAOSKiosk.
This change supports in kernel drivers for Chelsio T4, T5 & T6 adapters with PCI-E SR-IOV Virtual Functions.
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.5.0 to 3.6.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](docker/login-action@184bdaa...5e57cd1)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Remove the list of boards and refer to the ADRs and developer documentation
instead.

Fixes #4316
RaspberryMatic was renamed to OpenCCU in
OpenCCU/OpenCCU#3162. This caused change of the name of
the directory in the source tarball, causing build failure when the archive
wasn't cached.
* RaspberryPi: Update kernel to 6.12.47 - stable_20250916

* Remove patches merged in 6.12.47

* Update Buildroot rpi-firmware package for 6.12.47

* buildroot 9acb31819a...7ce414454b (1):
  > package/rpi-firmware: update to ba22330 (for stable_20250916)
* Improve UX of HA CLI wrapper and emergency console

For many users, the emergency console gives feeling that the system is
completely broken. However, there are various cases when the system just takes
just a bit longer to start up and the emergency message is shown, while it
finishes a proper startup shortly after. This change tries to improve the UX in
several ways:

* The limit before a forced emergency console startup is changed to 3 minutes
* Waiting can be interrupted with Ctrl+C (reset counter is cleared then)
* Some hints what to check have been added before starting the shell
* Also, because if the HA CLI failed for 5 times in a row in quick succession,
  the CLI startup was then not retried anymore and user may have been left with
  a black screen, the restart limits timeouts have been adjusted only to back
  off and never mark the unit as failed

Closes #4273

* Use /bin/sh and printf to silence linter errors
Add snd-ctxfi driver as module to generic PCI device support fragment.

Fixes #4141
Bumps [actions/stale](https://github.com/actions/stale) from 10.0.0 to 10.1.0.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](actions/stale@3a9db7e...5f858e3)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: 10.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
sairon and others added 11 commits October 8, 2025 09:52
The CPUfreq governor "powersave" sets the CPU statically to the lowest
frequency within the borders of scaling_min_freq and scaling_max_freq.
This can be useful if a particular power budget should not ever be
crossed. Can be set using `cpufreq.default_governor=powersave`. Note
that this obviously affects performance.
This might be required for some modern Intel processors (Meteor Lake and newer)
which fail to boot Linux kernel without x2APIC controller when some features
(e.g. VT-d or x2APIC itself) are enabled in the BIOS.

Enable it also for OVA, as it can be emulated in virtual machines, even when
the host CPU does not support it.

Fixes #4337, fixes #4144, fixes #4345
…on (#4344)

Use the version used in the docker-engine package to ensure it stays in sync.
Although we haven't seen any issues related to the fact it was sometimes
mismatching, reduce the burden of needing it to be synced manually.
* buildroot 7ce414454b...02f1553a34 (1):
  > Merge tag '2025.02.7' into 2025.02.x-haos
…PCIe Gen3x2 Bridge (#4366)

Vendor ID: 152d
Product ID: 0583

(cherry picked from commit 4e7b99d)
A bug introduced in Docker v28.2+ can cause slow container restart in some
cases because of usage of IPv4 mapped IPv6 addresses in iptables command.
Backport a simple patch from upstream to fix it before we bump to a newer
Docker version.

Fixes #4363

(cherry picked from commit b3a9e76)
With home-assistant/cli#604, there is no
--content-trust option anymore. Remove the call and only check if Supervisor is
healthy and there are no issues. This replaces #4370 which is too broad.

(cherry picked from commit 1d29f6b)
@sairon sairon requested a review from agners November 3, 2025 11:49
@sairon
Copy link
Member Author

sairon commented Nov 3, 2025

@coderabbitai
Copy link

coderabbitai bot commented Nov 3, 2025

📝 Walkthrough

Walkthrough

Multiple GitHub Actions workflows are pinned to exact commit SHAs for reproducibility. Linux kernel versions upgraded across buildroot configurations. Kernel patches removed and added; Makefile refactored with silent mode support; shell scripts enhanced with improved error handling and Docker versioning; system service configurations updated; test suite modified to validate supervisor health.

Changes

Cohort / File(s) Summary
GitHub Actions Workflow Pinning
.github/workflows/artifacts-index.yaml, build.yaml, label-actions.yml, lock.yml, pr-checks.yml, release-drafter.yml, stale.yml, test.yaml
All workflow action references pinned from semantic version tags (v5, v6, etc.) to exact commit SHAs with inline version comments for traceability; no behavioral changes.
Kernel Version Upgrades
buildroot-external/configs/generic_aarch64_defconfig, generic_x86_64_defconfig, green_defconfig, khadas_vim3_defconfig, odroid_c2_defconfig, odroid_c4_defconfig, odroid_m1_defconfig, odroid_m1s_defconfig, odroid_n2_defconfig, odroid_xu4_defconfig, tinker_defconfig
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE uniformly updated from 6.12.43 to 6.12.51 across all device configurations.
Raspberry Pi Tarball Updates
buildroot-external/configs/rpi2_defconfig, rpi3_64_defconfig, rpi3_defconfig, rpi4_64_defconfig, rpi4_defconfig, rpi5_64_defconfig, yellow_defconfig
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION updated from stable_20250702 to stable_20250916 for Raspberry Pi kernel sources.
Kernel Configuration Additions
buildroot-external/kernel/v6.12.y/device-support-pci.config, hassos.config
New kernel config options added: CONFIG_SND_CTXFI=m (sound driver), CONFIG_PSI=y (pressure stall info), CONFIG_HID_MULTITOUCH=m (HID support).
Linux Patch Removals
buildroot-external/patches/linux/6.12.43/0001-ipv6-add-option-to-explicitly-enable-reachability-te.patch, 0002-net-ipv4-fix-regression-in-local-broadcast-routes.patch
Two patches completely removed: IPv6 reachability probe feature and broadcast routes regression fix, reverting to prior kernel behavior.
Linux Patch Modifications
buildroot-external/board/raspberrypi/patches/linux/0004-usb-dwc2-masquerade-split-interrupt-transfers.patch, 0005-Fixup-usb-dwc2-limit-maximum-packet-size-for-split-I.patch
Split-interrupt masquerading patch removed; max packet size fix for split-IN control transfers added.
Other Board/Device Updates
buildroot-external/board/asus/tinker/patches/linux/0009-Revert-can-ti_hecc-fix-Woverflow-compiler-warning.patch, buildroot-external/board/pc/generic-x86-64/kernel.config, buildroot-external/board/pc/ova/kernel.config, buildroot-external/board/raspberrypi/cmdline.txt
CAN driver macro fix; CPU frequency and x2APIC kernel configs enabled; USB storage quirk added to RPi boot parameters.
Build System & Meta
Makefile, buildroot-external/meta, buildroot
Makefile refactored with SILENT mode detection and centralized print macro; buildroot-external version bumped from 2 to 3; buildroot submodule updated to new commit.
Package & Script Updates
buildroot-external/package/hassio/create-data-partition.sh, buildroot-external/package/hassio/hassio.mk, buildroot-external/package/rpi-rf-mod/rpi-rf-mod.mk, buildroot-external/package/rpi-rf-mod/rpi-rf-mod.hash, buildroot-external/patches/docker-engine/0001-Unmap-IPv4-addresses-loaded-from-store.patch
Docker version parameterization added to create-data-partition.sh and passed through hassio.mk; rpi-rf-mod source migrated from jens-maus to OpenCCU repository; docker-engine patch adds IPv4 Unmap call.
System Configuration
buildroot-external/rootfs-overlay/usr/lib/systemd/system/[email protected]
Service restart configuration enhanced: StartLimitIntervalSec added, RestartSec changed to 100ms, RestartMaxDelaySec and RestartSteps added for controlled pacing.
System Scripts
buildroot-external/rootfs-overlay/usr/sbin/hassos-cli, buildroot-external/rootfs-overlay/usr/sbin/hassos-supervisor
hassos-cli improved with startup resilience (trap handlers, emergency shell, progress indicators, service reset on interrupt); hassos-supervisor now captures container ID via SUPERVISOR_CIDFILE and --cidfile Docker flag.
Miscellaneous
README.md, Documentation/kernel.md, buildroot-external/scripts/post-build.sh, tests/supervisor_test/test_supervisor.py
README hardware section replaced with policy references; documentation version table updated; HOME_URL changed to www.home-assistant.io; test_code_sign replaced with test_supervisor_errors for health/resolution checks.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant hassos-cli
    participant ha-cli
    participant Emergency Shell

    User->>hassos-cli: Start (exec)
    activate hassos-cli
    hassos-cli->>hassos-cli: Set INT trap handler
    loop Startup Wait (180s max)
        hassos-cli->>hassos-cli: Print progress indicator
        hassos-cli->>ha-cli: Spawn/wait for ha-cli
        alt ha-cli exits with code 10
            ha-cli-->>hassos-cli: Exit 10
            hassos-cli->>hassos-cli: run_shell()
        else CTRL+C pressed
            User->>hassos-cli: SIGINT
            hassos-cli->>hassos-cli: interrupt() handler
            hassos-cli->>hassos-cli: Reset ha-cli service
        else ha-cli exits with 130
            ha-cli-->>hassos-cli: Exit 130
            hassos-cli->>hassos-cli: Print interruption msg
        else ha-cli exits with 143
            ha-cli-->>hassos-cli: Exit 143
            hassos-cli->>hassos-cli: Print termination msg
        else Wait timeout reached
            hassos-cli->>Emergency Shell: Escalate
            Emergency Shell->>User: Interactive fallback
        end
    end
    deactivate hassos-cli
Loading
sequenceDiagram
    participant Build System
    participant Makefile
    participant Shell
    participant Output

    Build System->>Makefile: Invoke target with/without -s flag
    activate Makefile
    Makefile->>Makefile: Detect SILENT from MAKEFLAGS
    alt Silent mode enabled
        Makefile->>Makefile: SILENT=1
    else Silent mode disabled
        Makefile->>Makefile: SILENT=""
    end
    
    Makefile->>Shell: $(call print, message)
    activate Shell
    alt SILENT not set
        Shell->>Output: Echo message
    else SILENT is set
        Shell->>Output: (suppress output)
    end
    deactivate Shell
    deactivate Makefile
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Action pinning consistency: Most workflow files follow identical pattern (pinning multiple actions to SHAs), reducing per-file review burden through repetition.
  • Configuration bumps: Kernel version and tarball URL updates across defconfig files are mechanical and uniform.
  • Areas requiring extra attention:
    • buildroot-external/rootfs-overlay/usr/sbin/hassos-cli — Startup resilience logic adds trap handlers, emergency shell path, and signal coordination; verify control flow and signal safety.
    • buildroot-external/rootfs-overlay/usr/sbin/hassos-supervisor — New CID file handling and Docker mount; verify file lifecycle and container environment expectations.
    • buildroot-external/package/hassio/create-data-partition.sh and .mk — Docker version parameterization threading; ensure version variable is correctly propagated and resolved.
    • Patch removals (0002-net-ipv4-fix-regression-in-local-broadcast-routes.patch) — Confirm intent to revert these behaviors and no unintended side effects.
    • Test replacement (test_code_signtest_supervisor_errors) — Validate new test scope aligns with intended coverage goals.

Pre-merge checks and finishing touches

✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title 'Prepare 16.3' is clear and directly related to the main purpose of the changeset. The PR summary confirms this is about preparing the operating system for release version 16.3, which involves kernel updates, infrastructure changes, and various system improvements. The title accurately reflects the primary objective—preparing a release version—though it is intentionally concise and does not enumerate all individual changes (which is appropriate for a PR title).
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch prepare-16.3

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.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (3)
buildroot-external/board/pc/generic-x86-64/kernel.config (1)

49-49: LGTM: x2APIC support enabled

Enabling x2APIC provides improved interrupt handling on modern x86 processors, which can benefit system performance and scalability.

Minor organizational note: This x2APIC config option is placed between MMC-related settings. While functionally correct, it could be moved near other x86-specific options (e.g., near the EDAC or LPC_ICH settings) for better logical grouping.

buildroot-external/package/hassio/create-data-partition.sh (1)

7-7: Consider adding validation for the docker_version parameter.

If the parameter is empty or invalid, the docker run command will fail with a potentially unclear error message. Adding validation would improve debugging.

For example:

 docker_version=$4
+
+if [ -z "${docker_version}" ]; then
+    echo "Error: docker_version parameter is required"
+    exit 1
+fi
buildroot-external/package/rpi-rf-mod/rpi-rf-mod.mk (1)

10-10: Consider updating the Codeload URL comment.

The comment on Line 10 still references the old jens-maus/RaspberryMatic repository. While this appears to be a template comment, updating it to reference OpenCCU/OpenCCU would improve consistency.

-# https://codeload.github.com/jens-maus/RaspberryMatic/tar.gz/COMMIT
+# https://codeload.github.com/OpenCCU/OpenCCU/tar.gz/COMMIT
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between d60618a and bd5ea37.

📒 Files selected for processing (52)
  • .github/workflows/artifacts-index.yaml (1 hunks)
  • .github/workflows/build.yaml (12 hunks)
  • .github/workflows/label-actions.yml (1 hunks)
  • .github/workflows/lock.yml (1 hunks)
  • .github/workflows/pr-checks.yml (1 hunks)
  • .github/workflows/release-drafter.yml (1 hunks)
  • .github/workflows/stale.yml (1 hunks)
  • .github/workflows/test.yaml (4 hunks)
  • Documentation/kernel.md (1 hunks)
  • Makefile (3 hunks)
  • README.md (1 hunks)
  • buildroot (1 hunks)
  • buildroot-external/board/asus/tinker/patches/linux/0009-Revert-can-ti_hecc-fix-Woverflow-compiler-warning.patch (0 hunks)
  • buildroot-external/board/pc/generic-x86-64/kernel.config (2 hunks)
  • buildroot-external/board/pc/ova/kernel.config (2 hunks)
  • buildroot-external/board/raspberrypi/cmdline.txt (1 hunks)
  • buildroot-external/board/raspberrypi/patches/linux/0004-usb-dwc2-masquerade-split-interrupt-transfers.patch (0 hunks)
  • buildroot-external/board/raspberrypi/patches/linux/0005-Fixup-usb-dwc2-limit-maximum-packet-size-for-split-I.patch (0 hunks)
  • buildroot-external/configs/generic_aarch64_defconfig (1 hunks)
  • buildroot-external/configs/generic_x86_64_defconfig (1 hunks)
  • buildroot-external/configs/green_defconfig (1 hunks)
  • buildroot-external/configs/khadas_vim3_defconfig (1 hunks)
  • buildroot-external/configs/odroid_c2_defconfig (1 hunks)
  • buildroot-external/configs/odroid_c4_defconfig (1 hunks)
  • buildroot-external/configs/odroid_m1_defconfig (1 hunks)
  • buildroot-external/configs/odroid_m1s_defconfig (1 hunks)
  • buildroot-external/configs/odroid_n2_defconfig (1 hunks)
  • buildroot-external/configs/odroid_xu4_defconfig (1 hunks)
  • buildroot-external/configs/ova_defconfig (1 hunks)
  • buildroot-external/configs/rpi2_defconfig (1 hunks)
  • buildroot-external/configs/rpi3_64_defconfig (1 hunks)
  • buildroot-external/configs/rpi3_defconfig (1 hunks)
  • buildroot-external/configs/rpi4_64_defconfig (1 hunks)
  • buildroot-external/configs/rpi4_defconfig (1 hunks)
  • buildroot-external/configs/rpi5_64_defconfig (1 hunks)
  • buildroot-external/configs/tinker_defconfig (1 hunks)
  • buildroot-external/configs/yellow_defconfig (1 hunks)
  • buildroot-external/kernel/v6.12.y/device-support-pci.config (1 hunks)
  • buildroot-external/kernel/v6.12.y/hassos.config (2 hunks)
  • buildroot-external/meta (1 hunks)
  • buildroot-external/package/hassio/create-data-partition.sh (2 hunks)
  • buildroot-external/package/hassio/hassio.mk (1 hunks)
  • buildroot-external/package/rpi-rf-mod/rpi-rf-mod.hash (1 hunks)
  • buildroot-external/package/rpi-rf-mod/rpi-rf-mod.mk (1 hunks)
  • buildroot-external/patches/docker-engine/0001-Unmap-IPv4-addresses-loaded-from-store.patch (1 hunks)
  • buildroot-external/patches/linux/6.12.43/0001-ipv6-add-option-to-explicitly-enable-reachability-te.patch (0 hunks)
  • buildroot-external/patches/linux/6.12.43/0002-net-ipv4-fix-regression-in-local-broadcast-routes.patch (0 hunks)
  • buildroot-external/rootfs-overlay/usr/lib/systemd/system/[email protected] (2 hunks)
  • buildroot-external/rootfs-overlay/usr/sbin/hassos-cli (2 hunks)
  • buildroot-external/rootfs-overlay/usr/sbin/hassos-supervisor (3 hunks)
  • buildroot-external/scripts/post-build.sh (1 hunks)
  • tests/supervisor_test/test_supervisor.py (1 hunks)
💤 Files with no reviewable changes (5)
  • buildroot-external/board/raspberrypi/patches/linux/0004-usb-dwc2-masquerade-split-interrupt-transfers.patch
  • buildroot-external/board/raspberrypi/patches/linux/0005-Fixup-usb-dwc2-limit-maximum-packet-size-for-split-I.patch
  • buildroot-external/patches/linux/6.12.43/0001-ipv6-add-option-to-explicitly-enable-reachability-te.patch
  • buildroot-external/patches/linux/6.12.43/0002-net-ipv4-fix-regression-in-local-broadcast-routes.patch
  • buildroot-external/board/asus/tinker/patches/linux/0009-Revert-can-ti_hecc-fix-Woverflow-compiler-warning.patch
🧰 Additional context used
📓 Path-based instructions (1)
*/**(html|markdown|md)

⚙️ CodeRabbit configuration file

*/**(html|markdown|md): - For instructional content in documentation, use a direct and authoritative tone. Avoid expressions of politeness such as 'may' or 'please', and ensure the goal of the instruction is fronted.

  • Apply the Microsoft Style Guide to ensure documentation maintains clarity and conciseness.
  • In step-by-step instructions, front the location phrase in the instructional sentence.
  • In step-by-step instructions, front the 'goal' in the instructional sentence.
  • In step-by-step instructions, if in doubt what to front, front the 'goal' before the location phrase in the instructional sentence.
  • do not hyphenate terms like 'top-right' or 'bottom-left' with 'corner'

*/**(html|markdown|md): - Use bold to mark UI strings.

  • If "" are used to mark UI strings, replace them by bold.

  • Be brief in your replies and don't add fluff like "thank you for..." and "Please let me know if"

  • Use sentence-style capitalization also in headings.

do not comment on HTML used for icons

Avoid flagging inline HTML for embedding videos in future reviews for this repository.

Files:

  • buildroot-external/meta
  • Documentation/kernel.md
🪛 LanguageTool
buildroot-external/board/raspberrypi/cmdline.txt

[grammar] ~1-~1: Aquí puede haber un error.
Context: ...8a:u,152d:a583:u,152d:a578:u,152d:0583:u

(QB_NEW_ES)

🔇 Additional comments (52)
buildroot-external/configs/odroid_c2_defconfig (1)

21-21: LGTM: Kernel version bump to 6.12.51.

The kernel version update is clean and consistent with the PR's release preparation objectives.

buildroot-external/configs/generic_x86_64_defconfig (1)

21-21: LGTM: Kernel version bump to 6.12.51.

The kernel version update matches the other defconfig files in this PR and aligns with the release preparation.

buildroot (1)

1-1: Submodule pointer update aligns with release objectives.

The buildroot submodule is being updated to commit 02f1553a34c2b8f6e432fe4300bfe529897d5f3c as part of the 16.3 release preparation. Per the PR objectives, this update introduces multiple kernel upgrades (6.12.44–6.12.51), configuration enhancements (PSI, HID multitouch, Creative Sound Blaster X-Fi support, x2APIC, Chelsio SR-IOV VF support), and infrastructure improvements across buildroot-external.

Please confirm that the target commit contains only the intended changes mentioned in the PR objectives and does not introduce unexpected breaking changes. You may verify by inspecting the buildroot repository at commit 02f1553a34c2b8f6e432fe4300bfe529897d5f3c or by running the build locally to validate all kernel and configuration changes are as expected.

buildroot-external/kernel/v6.12.y/hassos.config (2)

15-15: LGTM: PSI (Pressure Stall Information) enabled

This addition enables kernel tracking of resource pressure stalls, which can help Home Assistant OS monitor system health and resource contention.


208-208: LGTM: HID multitouch support enabled

Adding multitouch support as a module extends hardware compatibility for touchscreen devices.

buildroot-external/configs/rpi4_64_defconfig (1)

22-22: LGTM: Raspberry Pi kernel tarball updated to stable_20250916

The tarball source has been updated consistently with other Raspberry Pi configurations in this PR.

buildroot-external/configs/odroid_xu4_defconfig (1)

22-22: LGTM: Kernel version bumped to 6.12.51

This version update is consistent with the kernel version bumps across other defconfigs in this PR.

buildroot-external/kernel/v6.12.y/device-support-pci.config (1)

42-42: LGTM: Creative Sound Blaster X-Fi driver enabled

Adding this PCI sound driver as a module expands audio hardware support as described in the PR objectives.

buildroot-external/board/pc/generic-x86-64/kernel.config (1)

13-13: LGTM: Power-saving CPU frequency governor enabled

This enables the powersave governor, allowing dynamic CPU frequency scaling for better energy efficiency on x86-64 systems.

buildroot-external/configs/odroid_m1_defconfig (1)

21-21: LGTM: Kernel version bumped to 6.12.51

This version update maintains consistency with the kernel version bumps across other board configurations in this PR.

buildroot-external/configs/rpi5_64_defconfig (1)

22-22: LGTM: Raspberry Pi kernel tarball updated to stable_20250916

The tarball source update is consistent with other Raspberry Pi configurations in this PR.

buildroot-external/configs/rpi2_defconfig (1)

23-23: LGTM: Raspberry Pi kernel tarball updated to stable_20250916

This completes the consistent Raspberry Pi kernel tarball updates across all RPi board configurations.

buildroot-external/meta (1)

2-2: LGTM! Version bump to 16.3 is consistent with release preparation.

The minor version increment aligns with the PR objectives.

buildroot-external/board/pc/ova/kernel.config (2)

100-100: LGTM! Enabling x2APIC support for OVA.

Extended APIC support is beneficial for virtualization environments, improving interrupt handling scalability.


120-120: LGTM! Adding Chelsio T4/T5/T6 VF support.

Enabling the Chelsio virtual function driver as a module provides SR-IOV support for Chelsio adapters in virtualized environments.

buildroot-external/configs/yellow_defconfig (1)

22-22: LGTM! Raspberry Pi kernel tarball updated consistently.

The kernel tarball location update matches other Raspberry Pi defconfig files in this PR, ensuring consistency across all RPi-based board configurations.

buildroot-external/configs/rpi3_64_defconfig (1)

22-22: LGTM! Raspberry Pi kernel tarball updated consistently.

The kernel tarball location update is consistent with other Raspberry Pi configurations in this PR.

buildroot-external/scripts/post-build.sh (1)

30-30: URL change verified and approved.

The HOME_URL update to https://www.home-assistant.io/ aligns with the project's current web presence and is confirmed accessible (HTTP 200).

buildroot-external/configs/rpi3_defconfig (1)

23-23: Tarball verified as accessible.

The new Raspberry Pi kernel tarball at stable_20250916 is accessible (HTTP 200). The update is valid and consistent with other defconfig changes in this PR.

buildroot-external/configs/generic_aarch64_defconfig (1)

21-21: LGTM! Kernel version updated to 6.12.51.

Kernel version verified and exists on kernel.org. The version bump is consistent with the broader kernel updates mentioned in the PR objectives.

buildroot-external/configs/odroid_n2_defconfig (1)

21-21: Kernel version bump looks good.

The update from 6.12.43 to 6.12.51 aligns with the coordinated version bump across multiple boards documented in the PR objectives.

buildroot-external/rootfs-overlay/usr/lib/systemd/system/[email protected] (1)

18-31: Improved restart resilience with exponential backoff.

The restart configuration now implements graduated delays (100ms → 3s over 3 steps) which prevents tight restart loops while enabling quick recovery. The StartLimitIntervalSec=3s matching RestartMaxDelaySec=3s is well-documented and prevents premature service failure marking.

.github/workflows/lock.yml (1)

17-17: SHA pinning improves supply chain security.

Pinning the action to a specific commit hash ensures reproducibility and protects against tag manipulation, while the version comment maintains readability.

.github/workflows/label-actions.yml (1)

17-17: SHA pinning enhances workflow security.

Consistent with the broader effort to pin actions to specific commits for reproducibility and supply chain security.

Documentation/kernel.md (1)

6-24: Kernel version documentation updated correctly.

The version table accurately reflects the kernel bump: Raspberry Pi boards to 6.12.47 and other boards to 6.12.51, aligning with the corresponding defconfig updates throughout the PR.

buildroot-external/configs/tinker_defconfig (1)

23-23: Kernel version bump looks good.

Consistent with the coordinated kernel update to 6.12.51 across multiple board configurations.

buildroot-external/configs/odroid_m1s_defconfig (1)

21-21: Kernel version bump looks good.

The update to 6.12.51 is consistent with the other ODROID and mainline board configurations.

.github/workflows/stale.yml (1)

22-22: Action updated and pinned to SHA.

This combines a version upgrade (v9.1.0 → v10.1.0) with SHA pinning for both improved functionality and supply chain security.

buildroot-external/patches/docker-engine/0001-Unmap-IPv4-addresses-loaded-from-store.patch (1)

1-33: LGTM! Critical Docker networking fix.

This patch correctly addresses the IPv4-mapped IPv6 address issue in Docker's bridge networking by adding the Unmap() call. The fix is minimal, well-attributed with proper cherry-pick/backport metadata, and aligns with the PR's objective to fix broken outgoing connections.

buildroot-external/configs/rpi4_defconfig (1)

23-23: LGTM! Raspberry Pi kernel tarball update.

The kernel source tarball update from stable_20250702 to stable_20250916 is consistent with the PR objectives for Raspberry Pi kernel updates.

buildroot-external/board/raspberrypi/cmdline.txt (1)

1-1: LGTM! USB storage quirk for JMicron device.

Adding the 152d:0583:u quirk disables UAS for this JMicron USB bridge, which aligns with the PR's objective to address USB storage stability issues on Raspberry Pi.

.github/workflows/test.yaml (1)

35-35: LGTM! GitHub Actions pinned for reproducibility.

All actions are properly pinned to exact commit SHAs with version comments, following security best practices and ensuring build reproducibility. This aligns with the PR-wide pattern of deterministic action pinning.

Also applies to: 45-45, 60-60, 80-80, 88-88, 96-96

buildroot-external/configs/ova_defconfig (1)

21-21: LGTM! Kernel version bump.

The kernel version update from 6.12.43 to 6.12.51 is consistent with the PR's kernel update objectives across multiple platforms.

.github/workflows/artifacts-index.yaml (1)

42-42: LGTM! Actions pinned to exact commits.

Properly pins actions to specific commit SHAs for reproducibility and security, consistent with the PR-wide pinning strategy.

Also applies to: 47-47

.github/workflows/pr-checks.yml (1)

18-18: LGTM! Actions pinned and hadolint switched to official source.

All actions are properly pinned to commit SHAs. Additionally, line 23 switches from brpaz/hadolint-action to the official hadolint/hadolint-action, which is a good practice for using maintained, official actions.

Also applies to: 23-23, 28-28

.github/workflows/build.yaml (1)

58-58: LGTM! Comprehensive action pinning across build workflow.

All GitHub Actions throughout the build workflow are properly pinned to exact commit SHAs with version comments. This includes:

  • Checkout, setup-python, and github-script actions
  • Docker-related actions (setup-buildx, login, build-push)
  • Artifact management (upload/download)
  • Cache operations (restore/save)
  • Release asset uploads

This ensures deterministic, reproducible builds and follows security best practices.

Also applies to: 150-150, 180-180, 182-182, 188-188, 210-210, 230-230, 237-237, 263-263, 284-284, 332-332, 347-347, 380-380, 389-389, 397-397, 405-405, 414-414, 422-422, 430-430, 469-469

tests/supervisor_test/test_supervisor.py (1)

120-133: LGTM! Health check validation looks solid.

The new test appropriately validates Supervisor health and resolution state, checking both the health check result and ensuring no unhealthy or unsupported entries exist. The logging will aid troubleshooting.

Makefile (3)

19-23: LGTM! Silent mode support implemented correctly.

The SILENT variable detection and print macro implementation properly support Make's silent mode (-s flag). The conditional output using $(info ...) is the idiomatic approach for this functionality.


37-37: LGTM! Consistent use of new print macro.

The fallback target now uses the centralized print macro, maintaining consistent silent mode support.


51-55: LGTM! Build target messaging now respects silent mode.

Both the config and build target rules consistently use the new print macro for their status messages.

buildroot-external/rootfs-overlay/usr/sbin/hassos-cli (3)

6-20: LGTM! Excellent UX improvements for startup failures.

The new helper functions significantly improve the user experience:

  • interrupt properly resets service state before dropping to shell
  • emergency_shell provides clear troubleshooting guidance with actionable commands

The emergency console messaging is particularly helpful for users facing startup delays.


22-40: LGTM! Improved startup resilience with progress feedback.

The interrupt trap and animated progress indicator enhance UX. The 3-minute timeout (180s) before triggering the emergency shell is reasonable for slow startup scenarios. The backspace-based animation provides good visual feedback without cluttering output.


47-66: LGTM! Exit code handling is robust and informative.

The case statement properly handles all exit scenarios with appropriate actions:

  • Code 10: drops to shell as intended
  • Code 130: resets failed service state and provides user feedback
  • Code 143: graceful termination handling
  • Consistent use of printf for all messaging
buildroot-external/configs/odroid_c4_defconfig (1)

21-21: LGTM! Kernel version bump to 6.12.51.

The kernel version update is consistent with the broader PR objective of upgrading to Linux 6.12.51 across multiple platform configurations.

buildroot-external/configs/green_defconfig (1)

21-21: LGTM! Kernel version bump to 6.12.51.

Consistent with the kernel version updates across other platform configurations in this PR.

buildroot-external/package/rpi-rf-mod/rpi-rf-mod.hash (1)

2-2: LGTM! Hash file updated for new rpi-rf-mod version.

The hash file correctly reflects the new tarball (version e1404d6b2...). The hash will be automatically verified during the build process when the tarball is downloaded.

buildroot-external/configs/khadas_vim3_defconfig (1)

21-21: LGTM! Kernel version bump to 6.12.51.

Another platform config updated to the new kernel version as part of the coordinated upgrade across all boards.

buildroot-external/package/hassio/hassio.mk (1)

40-40: LGTM! Docker version parameter added for DinD setup.

The addition of $(DOCKER_ENGINE_VERSION) as a parameter to the data partition creation script aligns with the PR objective of using a matching DinD daemon version. This ensures version consistency between the Docker engine and the Docker-in-Docker daemon used during partition creation.

buildroot-external/rootfs-overlay/usr/sbin/hassos-supervisor (2)

14-14: LGTM!

The CID file path is properly defined using the existing SUPERVISOR_DATA directory.


91-93: LGTM!

Properly removes the CID file before container creation to prevent Docker from refusing to start. The conditional check and comment clearly explain the reasoning.

buildroot-external/package/rpi-rf-mod/rpi-rf-mod.mk (1)

17-18: Repository migration verified.

The new repository OpenCCU/OpenCCU is accessible, the commit e1404d6b2400589a1956d7429ad16227c8db6771 exists, and the tarball is downloadable. The migration is valid.

README.md (1)

19-22: External documentation links verified and valid.

All referenced resources are confirmed accessible:

  • ADR-0015 and ADR-0017 are both present in the Home Assistant architecture repository and marked as accepted
  • The Board support section is available in the Home Assistant Developer Docs

The refactoring of the hardware list to centralize policy in ADRs improves maintainability without introducing broken references.

runs-on: ubuntu-latest
steps:
- uses: release-drafter/release-drafter@v6
- uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

LGTM! Pinning action to commit SHA enhances security.

Pinning GitHub Actions to specific commit SHAs prevents tag-based supply chain attacks and ensures reproducible builds.

Optionally verify the SHA corresponds to v6.1.0:


🏁 Script executed:

#!/bin/bash
# Verify the SHA corresponds to the v6.1.0 tag
gh api repos/release-drafter/release-drafter/git/refs/tags/v6.1.0 | jq -r '.object.sha'

Length of output: 40


I found a discrepancy. Let me verify what version the pinned SHA actually corresponds to:

Let me search for the release history to find what version that commit belongs to:

Let me query the GitHub API to find all releases and match the SHA:


---

🏁 Script executed:

```shell
#!/bin/bash
# Get all releases for release-drafter to find which one matches the workflow SHA
gh api repos/release-drafter/release-drafter/releases --paginate | jq -r '.[] | "\(.tag_name): \(.target_commitish)"' | head -20

Length of output: 444


Let me query for the actual commit SHAs for these tags:


---

🏁 Script executed:

```shell
#!/bin/bash
# Get commit SHAs for recent tags to find the one matching b1476f6e6eb133afa41ed8589daba6dc69b4d3f5
for tag in v6.1.0 v6.0.0 v5.25.0; do
  sha=$(gh api repos/release-drafter/release-drafter/git/refs/tags/$tag | jq -r '.object.sha')
  echo "$tag: $sha"
done

Length of output: 147


Let me search through more tags to find which one actually corresponds to the workflow SHA:


---

🏁 Script executed:

```shell
#!/bin/bash
# Get all tags and their commit SHAs to find the match
gh api repos/release-drafter/release-drafter/git/refs/tags --paginate | jq -r '.[] | "\(.ref | gsub("refs/tags/"; "")): \(.object.sha)"' | grep 'b1476f6e6eb133afa41ed8589daba6dc69b4d3f5'

Length of output: 44


Update inline comment: SHA corresponds to v6, not v6.1.0.

Verification revealed the pinned SHA b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 corresponds to the v6 tag, not v6.1.0 as indicated in the comment. The actual v6.1.0 SHA is 7cf306f56b79636bb76931494ccf29fc893763bd. Either update the comment to reflect v6, or pin to the correct v6.1.0 SHA instead.

Comment on lines +101 to +102
--cidfile "${SUPERVISOR_CIDFILE}" \
--mount type=bind,src="${SUPERVISOR_CIDFILE}",dst=/run/cid,readonly \
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify the CID file mount timing.

The CID file is both created by Docker (via --cidfile) and mounted into the container. Docker writes the CID file after container creation, but the mount is specified during creation. Verify that this doesn't cause a timing issue where the mount fails because the file doesn't exist yet.

Run the following test to verify the behavior:


🏁 Script executed:

#!/bin/bash
# Test if Docker can create a container with --cidfile and mount it simultaneously

# Create test directory
TEST_DIR=$(mktemp -d)
TEST_CIDFILE="${TEST_DIR}/test.cid"

# Try to create a container with cidfile and mount
if docker container create \
    --name test_cid_mount \
    --cidfile "${TEST_CIDFILE}" \
    --mount type=bind,src="${TEST_CIDFILE}",dst=/run/cid,readonly \
    busybox:latest sleep 1 2>&1; then
    echo "SUCCESS: Container created with cidfile and mount"
    docker rm test_cid_mount
else
    echo "FAILURE: Cannot mount cidfile during container creation"
fi

# Cleanup
rm -rf "${TEST_DIR}"

Length of output: 100


Based on Docker's official documentation, I found a critical issue with the review comment's code.

When using the --mount flag, Docker produces an error if the bind source path does not exist on the host. Since --mount does not automatically create a directory if the specified mount path does not exist on the host, but --cidfile writes the container ID file after container creation, this sequence fails: Docker tries to validate and mount the non-existent CID file during container creation, which would result in an error.

Review comment verification confirmed—this is a critical issue that needs to be fixed.


Remove the read-only bind mount or create the CID file before mounting it.

The --cidfile flag writes the container ID after creation, but --mount type=bind requires the source file to exist. Either:

  • Create the CID file beforehand before container creation, or
  • Remove the --mount for the CID file and access it through the host filesystem after the container is created

Lines 101–102 cannot coexist as written.

🤖 Prompt for AI Agents
In buildroot-external/rootfs-overlay/usr/sbin/hassos-supervisor around lines
101-102, the script uses --cidfile to write the container ID after creation
while also attempting a read-only bind mount of that same path with --mount,
which fails because Docker requires the bind source to exist at container
creation; either pre-create the CID file path before invoking Docker so the bind
mount is valid, or remove the --mount bind for the CID file and rely solely on
--cidfile (or read the CID from the container via docker/nerdctl after
creation); implement one of these two fixes and ensure the chosen approach
removes the conflicting option so Docker no longer errors on mount validation.

@sairon sairon merged commit bd5ea37 into main Nov 4, 2025
3 checks passed
@sairon sairon deleted the prepare-16.3 branch November 4, 2025 12:20
@github-actions github-actions bot locked and limited conversation to collaborators Nov 12, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants