Skip to content

[lis2dw12] Accelerometer component documentation#6277

Draft
latonita wants to merge 2 commits intoesphome:nextfrom
latonita:lis2dw12
Draft

[lis2dw12] Accelerometer component documentation#6277
latonita wants to merge 2 commits intoesphome:nextfrom
latonita:lis2dw12

Conversation

@latonita
Copy link
Contributor

@latonita latonita commented Mar 13, 2026

Description

Add a new component for the ST LIS2DW12 3-axis MEMS accelerometer. This is a low-power 14-bit accelerometer communicating over I2C, supporting tap/double-tap detection,free-fall, wake-up/activity, and 6D orientation features.

Features:

  • Acceleration X/Y/Z sensors (m/s²)
  • Configurable range (2G/4G/8G/16G), data rate (1.6Hz–1600Hz), power mode (high performance + 4 low-power modes)
  • Filter bandwidth selection (ODR/2, /4, /10, /20) and low-noise mode
  • Software calibration offsets and axis transform (mirror/swap)
  • Binary sensors for tap, double-tap, freefall, and activity events
  • Text sensor for 6D orientation (X/Y/Z Up/Down)
  • Automation triggers for all events (on_tap, on_double_tap, on_freefall, on_active, on_orientation)

Related issue (if applicable): fixes https://github.com/orgs/esphome/discussions/3565

Pull request in esphome with YAML changes (if applicable):

Checklist

  • I am merging into next because this is new documentation that has a matching pull-request in esphome as linked above.
    or

  • I am merging into current because this is a fix, change and/or adjustment in the current documentation and is not for a new component or feature.

  • Link added in /src/content/docs/components/index.mdx when creating new documents for new components or cookbook.

New Component Images

If you are adding a new component to ESPHome, you can automatically generate a standardized black and white component name image for the documentation.

To generate a component image:

  1. Comment on this pull request with the following command, replacing component_name with your component name in lower_case format with underscores (e.g., bme280, sht3x, dallas_temp):

    @esphomebot generate image component_name
    
  2. The ESPHome bot will respond with a downloadable ZIP file containing the SVG image.

  3. Extract the SVG file and place it in the /public/images/ folder of this repository.

  4. Use the image in your component's index table entry in /src/content/docs/components/index.mdx.

Example: For a component called "DHT22 Temperature Sensor", use:

@esphomebot generate image dht22

Note: All images used in ImgTable components must be placed in /public/images/ as the component resolves them to absolute paths.

esphome[bot]
esphome bot previously requested changes Mar 13, 2026
Copy link

@esphome esphome bot left a comment

Choose a reason for hiding this comment

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

As this is a feature matched with a PR in https://github.com/esphome/esphome, please target your PR to the next branch and rebase.

@esphome esphome bot marked this pull request as draft March 13, 2026 22:36
@esphome
Copy link

esphome bot commented Mar 13, 2026

Please take a look at the requested changes, and use the Ready for review button when you are done, thanks 👍

Learn more about our pull request process.

@netlify
Copy link

netlify bot commented Mar 13, 2026

Deploy Preview for esphome ready!

Name Link
🔨 Latest commit 94b5457
🔍 Latest deploy log https://app.netlify.com/projects/esphome/deploys/69b54934b9316b0008e46c00
😎 Deploy Preview https://deploy-preview-6277--esphome.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR significantly expands and updates the ESPHome documentation set, including a new LIS2DW12 accelerometer page plus multiple other new/updated component docs and release-note tooling updates.

Changes:

  • Added new component documentation pages (notably lis2dw12, plus several others like serial_proxy, sen6x, hdc302x, dew_point, rp2040_ble, zephyr_mcumgr, audio/media source docs).
  • Updated existing documentation across many components (WiFi, UART, OTA, ESP32 camera/BLE, OpenThread, Modbus, etc.).
  • Updated release-notes generation tooling/templates and bumped data/version.yaml; added *.webp binary to .gitattributes.

Reviewed changes

Copilot reviewed 61 out of 67 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
src/content/docs/guides/troubleshooting.mdx Adds ESP32 ESP-IDF automatic crash reporting section to troubleshooting guide.
src/content/docs/guides/supporters.mdx Updates contributor list and last-updated date.
src/content/docs/guides/security_best_practices.mdx Removes deprecated MQTT SSL fingerprint example comments.
src/content/docs/guides/cli.mdx Removes deprecated mqtt-fingerprint CLI command docs.
src/content/docs/components/wifi.mdx Documents band_mode option for esp32-c5.
src/content/docs/components/vbus.mdx Adds DeltaSol CS4 model and supported sensors/binary sensors.
src/content/docs/components/usb_uart.mdx Adds debug_prefix and documents flush_timeout type as [Time].
src/content/docs/components/uart.mdx Documents flush_timeout and debug_prefix and updates UART debug helper signatures.
src/content/docs/components/touchscreen/gt911.mdx Expands GT911 examples and clarifies interrupt-pin behavior with IO expanders.
src/content/docs/components/text_sensor/version.mdx Adds hide_hash option and updates examples/wording.
src/content/docs/components/serial_proxy.mdx New docs page for the experimental Serial Proxy component.
src/content/docs/components/sensor/sen6x.mdx New docs page for the Sensirion SEN6x series sensor platform.
src/content/docs/components/sensor/sen5x.mdx Adds See Also link to the new SEN6x docs.
src/content/docs/components/sensor/lps22.mdx Updates supported LPS22 variants and links to datasheets.
src/content/docs/components/sensor/lis2dw12.mdx New docs page for LIS2DW12 accelerometer (hub + sensors/binary/text + triggers).
src/content/docs/components/sensor/integration.mdx Adds sensor.integration.set_value action documentation.
src/content/docs/components/sensor/images/jst6pin.png Adds connector image referenced by SEN6x wiring section.
src/content/docs/components/sensor/hdc302x.mdx New docs page for HDC302x sensors including heater actions and usage guidance.
src/content/docs/components/sensor/dew_point.mdx New docs page for dew point calculation sensor platform.
src/content/docs/components/safe_mode.mdx Adds safe_mode.mark_successful action docs.
src/content/docs/components/rp2040_ble.mdx New docs page for RP2040 BLE stack initialization component.
src/content/docs/components/rp2040.mdx Expands RP2040 platform docs (supported boards, BOOTSEL flashing, pin names, serial debugging).
src/content/docs/components/ota/zephyr_mcumgr.mdx New docs page for nRF52 OTA via Zephyr MCUmgr (MCUboot-only).
src/content/docs/components/ota/web_server.mdx Updates APIRef header path to ota_backend.h.
src/content/docs/components/ota/index.mdx Adds zephyr_mcumgr platform and updates APIRef header path.
src/content/docs/components/ota/http_request.mdx Updates APIRef header path to ota_backend.h.
src/content/docs/components/ota/esphome.mdx Updates APIRef header path to ota_backend.h.
src/content/docs/components/openthread.mdx Adds output_power option and documents ESP-IDF↔OpenThread log level mapping.
src/content/docs/components/online_image.mdx Documents 8-bit indexed BMP support.
src/content/docs/components/nrf52.mdx Adds advanced config section for OTA rollback behavior.
src/content/docs/components/mqtt.mdx Removes deprecated ssl_fingerprints option and section.
src/content/docs/components/modbus_controller.mdx Updates example to use ESPTime and clarifies time-component requirement.
src/content/docs/components/modbus.mdx Clarifies flow-control pin guidance; adds turnaround_time; improves disable_crc description.
src/content/docs/components/media_source/index.mdx New domain index page for media sources.
src/content/docs/components/media_source/audio_file.mdx New docs page for audio_file media source.
src/content/docs/components/media_player/speaker_source.mdx New docs page for speaker_source media player platform.
src/content/docs/components/media_player/speaker.mdx Updates supported codecs/options; refines performance notes and adds turn_on/off automations.
src/content/docs/components/media_player/index.mdx Expands documented media_player actions/conditions and clarifies action support differences.
src/content/docs/components/logger.mdx Adds nRF52-only logger options wait_for_cdc and early_message.
src/content/docs/components/index.mdx Adds many new component index entries (Serial Proxy, RP2040 BLE, nRF52 OTA, sensors, media/audio, etc.).
src/content/docs/components/http_request.mdx Documents ESP8266 TLS buffer size options.
src/content/docs/components/esp_ldo.mdx Expands ESP32-P4 LDO docs (internal channels, passthrough, safety notes).
src/content/docs/components/esp8266.mdx Documents enable_full_printf option.
src/content/docs/components/esp32_hosted.mdx Documents sdio_frequency option.
src/content/docs/components/esp32_camera.mdx Documents pixel_format and updates jpeg_quality; adds AtomS3R-CAM example.
src/content/docs/components/esp32_ble_server.mdx Adds max_clients option docs.
src/content/docs/components/esp32_ble.mdx Adds key-size and auth requirement options docs.
src/content/docs/components/esp32.mdx Adds engineering_sample; expands execute_from_psram; documents enable_full_printf.
src/content/docs/components/display/nextion.mdx Adds TFT upload timeout/retry/watchdog options and example.
src/content/docs/components/display/mipi_spi.mdx Adds ST7789P to supported panel list.
src/content/docs/components/display/mipi_dsi.mdx Reworks supported chips/displays/boards section and tables.
src/content/docs/components/display/epaper_spi.mdx Adds supported models, busy-pin inversion note, and 4-color example.
src/content/docs/components/cc1101.mdx Adds multiple runtime action docs (frequency/power/modulation/etc.).
src/content/docs/components/ble_nus.mdx Expands BLE NUS modes and buffer/debug options; adds BLE serial link.
src/content/docs/components/binary_sensor/esp32_touch.mdx Expands touch support notes to include ESP32-P4 and updates pin tables/variant notes.
src/content/docs/components/audio_file/index.mdx New docs page for embedding audio files in firmware.
script/release_notes_template.mdx Converts release notes template to MDX and adds new marker sections (upgrade checklist, undocumented API).
script/prompt_templates/breaking_changes.txt Expands prompt to generate upgrade checklist and (optionally) undocumented API changes; includes all PR scan.
script/generate_release_notes.py Updates generator for MDX template, new marker syntax, new labels, and new output files.
public/images/lis2dw12.jpg Adds LIS2DW12 image for component index.
public/images/hdc302x.svg Adds HDC302x component icon for component index.
lint.mjs Excludes script/release_notes_template.mdx from linting.
data/version.yaml Bumps version metadata to 2026.4.0-dev / 2026.4.
.gitattributes Marks *.webp as binary.

Comment on lines +72 to +74
- **output_power** (*Optional*, integer): The amount of TX power for the Thread 802.15.4 radio in dBm.
Range depends on the chip variant: ESP32-C5/C6 from ``-15dBm`` to ``20dBm``, ESP32-H2 from ``-24dBm`` to ``20dBm``.
Defaults to the platform default (typically ``0dBm``). Ensure the configured value complies with local regulatory limits.
Comment on lines 109 to 113
["StatsD", "/components/statsd/", "connection.svg", "dark-invert"],
["UDP", "/components/udp/", "udp.svg"],
["Packet Transport", "/components/packet_transport/", "packet_transport.svg", "dark-invert"],
["Serial Proxy", "/components/serial_proxy/", "uart.svg", "dark-invert"],
["Zigbee End Device", "/components/zigbee/", "zigbee.svg"],
Comment on lines 130 to 134
- [Andre (@andre68723)](https://github.com/andre68723)
- [Andreas Brett (@andreasbrett)](https://github.com/andreasbrett)
- [Andreas Hergert (@andreashergert1984)](https://github.com/andreashergert1984)
- [AndreKR (@AndreKR)](https://github.com/AndreKR)
- [Andres Vahter (@andresv)](https://github.com/andresv)
The [I²C](/components/i2c) is required to be set up in your configuration for this touchscreen to work.

This controller is used in the Espressif ESP32-S3-BOX-3 and the m5paper;
This controller is used in the Espressif ESP32-S3-BOX-3 and the m5paper as well as some Waveshare-ESP32-S3-Touch devices;
Comment on lines +47 to +49
- **interrupt_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The touch detection pin if run to an on-MCU pin.
If the touchscreen interrupt signal is wired through an IO Expander rather than directly to an ESP GPIO this will allow for configuration of touchscreen address
at boot but will not be used for interrupts and the driver will fall back to polling operation.
Comment on lines +54 to +56
- **debug_prefix** (*Optional*, string): A string prepended to every debug log line for this channel.
Useful when multiple channels have debugging enabled, to distinguish their output in the log. Defaults to "".
- **flush_timeout** (*Optional*, [Time](/guides/configuration-types#time)): The maximum time to wait for the USB output queue to drain when `flush()` is called. If the queue does not drain within this time, `flush()` returns a `TIMEOUT` result. Defaults to `100ms`.
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 13, 2026

Walkthrough

This PR introduces significant updates to ESPHome's release notes generation system (converting templates to MDX format, adding undocumented API changes tracking), adds extensive new component documentation (media/audio sources, multiple sensors, platform-specific features), and expands existing component documentation with new configuration options across 80+ files. It also removes deprecated MQTT SSL fingerprint functionality and updates infrastructure (version bump, lint rules).

Changes

Cohort / File(s) Summary
Build & Release Infrastructure
.gitattributes, data/version.yaml, lint.mjs, script/generate_release_notes.py
Updated release generation to handle undocumented API changes and multi-file outputs; converted to MDX format; version bumped to 2026.4.0-dev; added WebP binary attribute; linter now ignores release notes template.
Release Notes Templates
script/release_notes_template.mdx, script/prompt_templates/breaking_changes.txt
Converted HTML comment markers to MDX/JSX format; expanded prompt structure to include Upgrade Checklist and Undocumented API Changes sections; added multiple output file generation support.
New Media/Audio Components
src/content/docs/components/audio_file/index.mdx, src/content/docs/components/media_player/speaker.mdx, src/content/docs/components/media_player/speaker_source.mdx, src/content/docs/components/media_source/*
Added comprehensive documentation for audio file component, speaker media player with OPUS codec support, speaker source coordinator, and audio file media source with configuration examples and automations.
New Sensor Components
src/content/docs/components/sensor/{dew_point, hdc302x, lis2dw12, sen6x}.mdx
Added documentation for four new sensor platforms: dew point (Magnus formula), HDC302x (humidity/temperature with heater actions), LIS2DW12 (3-axis accelerometer), and SEN6x (environmental sensor series).
New Platform & OTA Components
src/content/docs/components/{serial_proxy, nrf52, rp2040_ble}.mdx, src/content/docs/components/ota/zephyr_mcumgr.mdx
Introduced documentation for serial proxy (UART exposure), RP2040 BLE stack initialization, and Zephyr MCUmgr OTA updates for nRF52 with MCUboot support.
Platform Framework Configuration
src/content/docs/components/{esp32, esp32_ble*, esp32_camera, esp32_hosted, esp8266, esp_ldo, nrf52, rp2040, wifi}.mdx
Added/expanded configuration options: ESP32-P4 engineering sample flag, full printf support, BLE key size/auth modes, camera pixel format, ESP32 hosted SDIO frequency, RP2040 BOOTSEL mode and GPIO mappings, WiFi band mode for ESP32-C5, LDO channels/passthrough mode.
Display & Touchscreen Components
src/content/docs/components/display/{epaper_spi, mipi_dsi, mipi_spi, nextion}.mdx, src/content/docs/components/touchscreen/gt911.mdx
Added display models (Waveshare, WeAct), 4-color display examples, expanded driver chip tables, Nextion TFT upload options, GT911 IO Expander interrupt pin support and Waveshare device examples.
Network & Protocol Component Updates
src/content/docs/components/{ble_nus, cc1101, http_request, logger, modbus*, mqtt, openthread, uart, usb_uart}.mdx
BLE NUS expanded for UART type; CC1101 runtime action configuration; ESP8266 TLS buffer sizing; nRF52 logger options; modbus turnaround time and CRC handling; MQTT removed SSL fingerprints; UART/USB added debug prefix and flush timeout; OpenThread TX power and ESP-IDF logging.
Media Player & Misc Features
src/content/docs/components/{media_player/index, safe_mode, text_sensor/version, vbus}.mdx
Media player actions expanded (mute, shuffle, playlist control); safe_mode.mark_successful action; version sensor hide_hash option; VBus added DeltaSol CS4 model with sensors/binary sensors.
OTA & Component References
src/content/docs/components/ota/{esphome, http_request, index, web_server}.mdx
Updated OTA API reference from ota_component.h to ota_backend.h across multiple OTA platforms; added zephyr_mcumgr to available platforms.
Deprecated Features & Guides
src/content/docs/guides/{cli, security_best_practices}.mdx
Removed mqtt-fingerprint wizard command and related TLS fingerprint configuration guidance for ESP8266.
Documentation Indices & General Guides
src/content/docs/components/index.mdx, src/content/docs/guides/{supporters, troubleshooting}.mdx
Updated component index with new entries (Serial Proxy, RP2040 BLE, SEN6x, LIS2DW12, dew point, HDC302x, Audio File, media sources); added contributors; expanded troubleshooting with automatic ESP32 crash reporting and serial console stack trace guidance.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • PR #5837: Modifies script/generate_release_notes.py and data/version.yaml with related prompt/PR-collection logic changes.
  • PR #6133: Updates src/content/docs/components/esp_ldo.mdx with complementary channel/passthrough configuration documentation.
  • PR #4950: Updates src/content/docs/components/rp2040.mdx with CYW43439 chip documentation and RP2350 references.

Suggested labels

has-parent, next

Suggested reviewers

  • kbx81
  • swoboda1337
🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically refers to the addition of LIS2DW12 accelerometer component documentation, which is the primary focus of this pull request.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Description check ✅ Passed The PR description clearly relates to the changeset, describing the LIS2DW12 accelerometer component documentation with detailed features and configuration options.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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.

Tip

Migrating from UI to YAML configuration.

Use the @coderabbitai configuration command in a PR comment to get a dump of all your UI settings in YAML format. You can then edit this YAML file and upload it to the root of your repository to configure CodeRabbit programmatically.

Copy link
Contributor

@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: 11

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
src/content/docs/guides/troubleshooting.mdx (3)

12-12: ⚠️ Potential issue | 🟡 Minor

Minor: "Esphome" should be "ESPHome" for consistent branding.

The product name uses all-caps "ESP" in the official branding.

📝 Suggested fix
-> instructions, see [Installing Esphome](/guides/installing_esphome/).
+> instructions, see [Installing ESPHome](/guides/installing_esphome/).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/guides/troubleshooting.mdx` at line 12, Replace the
incorrect branding instance "Esphome" with the proper "ESPHome" in the
documentation sentence (the snippet containing "instructions, see [Installing
Esphome](/guides/installing_esphome/)."); update the link text to read
"Installing ESPHome" while leaving the href unchanged.

90-90: ⚠️ Potential issue | 🟡 Minor

Minor: "Cli" should be "CLI" (acronym).

📝 Suggested fix
-   Then use the command line interface (see the [Cli](/guides/cli/) guide for full details):
+   Then use the command line interface (see the [CLI](/guides/cli/) guide for full details):
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/guides/troubleshooting.mdx` at line 90, Replace the
lowercase-acronym instance "Cli" in the sentence "Then use the command line
interface (see the [Cli](/guides/cli/) guide for full details):" with the
uppercase form "CLI" and update the link text accordingly so it reads "... (see
the [CLI](/guides/cli/) guide for full details):".

204-204: ⚠️ Potential issue | 🟡 Minor

Minor: "Esp32" should be "ESP32" for consistent capitalization.

📝 Suggested fix
-When using the ESP-IDF framework on [Esp32](/components/esp32/), you can also adjust the framework's internal
+When using the ESP-IDF framework on [ESP32](/components/esp32/), you can also adjust the framework's internal
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/guides/troubleshooting.mdx` at line 204, Replace the link
text "Esp32" with the correctly capitalized "ESP32" in the sentence "When using
the ESP-IDF framework on [Esp32](/components/esp32/)," (leave the URL
/components/esp32/ as-is) so the visible text reads "When using the ESP-IDF
framework on [ESP32](/components/esp32/),".
🧹 Nitpick comments (17)
src/content/docs/components/esp32_hosted.mdx (1)

47-49: Consider adding an explicit type for sdio_frequency for consistency.

Other variables in this section include type metadata; adding one here improves scanability and consistency.

Suggested doc tweak
-- **sdio_frequency** (*Optional*): Set the speed of communication between the master and
+- **sdio_frequency** (*Optional*, frequency): Set the speed of communication between the master and
   the slave. If you experience loss of communication, or reboots, then try reducing this value.
   The value can be between 400KHz and 50MHz, with a default of 40MHz.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/esp32_hosted.mdx` around lines 47 - 49, Add
explicit type metadata for the sdio_frequency property in the docs: update the
existing line for **sdio_frequency** to include its type (e.g., "*Optional*,
type: number (Hz)" or "integer (Hz)") alongside the optional marker and default
value so it matches the other variables' metadata and improves scanability;
reference the sdio_frequency entry and ensure the text still mentions valid
range (400KHz–50MHz) and default 40MHz.
src/content/docs/components/logger.mdx (1)

71-76: Consider aligning format with existing platform-specific options.

Two minor suggestions for consistency with the rest of this document:

  1. Platform restriction format: Other platform-specific options (e.g., line 48) use bold inline text like **nRF52 only**:. Consider using the same style here.

  2. Missing default values: Other boolean options in this file document their defaults (e.g., Defaults to false). Adding defaults for these options would be helpful for users.

📝 Suggested formatting for consistency
-- **wait_for_cdc** (*Optional*, boolean): Waits for the CDC port before starting setup (10-second timeout).
-   Only on nRF52.
-
-- **early_message** (*Optional*, boolean): Displays early debug information, such as the boot reason.
-   Only on nRF52.
+- **wait_for_cdc** (*Optional*, boolean): **nRF52 only**: Waits for the CDC port before starting setup (10-second timeout).
+   Defaults to `false`.
+
+- **early_message** (*Optional*, boolean): **nRF52 only**: Displays early debug information, such as the boot reason.
+   Defaults to `false`.

Note: Please verify the default values against the actual implementation.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/logger.mdx` around lines 71 - 76, Update the docs
for the two options wait_for_cdc and early_message to match the existing
platform-specific formatting and include default values: change the platform
note from "Only on nRF52." to the inline bold style "**nRF52 only**:" and append
the default for each boolean (e.g., "Defaults to false") after the description.
Locate the option entries for wait_for_cdc and early_message in the logger docs
and apply the same phrasing/format as the existing option at line 48 to keep
style consistent; verify the actual defaults in the implementation before
committing.
src/content/docs/components/esp_ldo.mdx (2)

56-64: Consider converting high-risk notes into GFM alerts for visibility.

The bricking/corruption and passthrough constraints are important enough to present as warning/note alerts for faster scanning.

🧭 Suggested MDX formatting
 ## Notes
 
-- The LDO output voltage may deviate by approximately 50-100 mV from the configured value.
-- Channels 1 and 2 are connected to the chip's internal flash and PSRAM power domains on most ESP32-P4 modules.
-  Only use these channels if your specific board schematic confirms they are routed to an external pad and are
-  not powering internal components.
-- ``passthrough`` mode passes the supply voltage directly to the output and does not support runtime voltage
-  adjustment. Setting ``adjustable: true`` together with ``voltage: passthrough`` is a configuration error and
-  will be rejected during validation.
+> [!NOTE]
+> The LDO output voltage may deviate by approximately 50-100 mV from the configured value.
+
+> [!WARNING]
+> Channels 1 and 2 are connected to the chip's internal flash and PSRAM power domains on most ESP32-P4 modules.
+> Only use these channels if your specific board schematic confirms they are routed to an external pad and are
+> not powering internal components.
+
+> [!WARNING]
+> ``passthrough`` mode passes the supply voltage directly to the output and does not support runtime voltage
+> adjustment. Setting ``adjustable: true`` together with ``voltage: passthrough`` is a configuration error and
+> will be rejected during validation.
As per coding guidelines "Use GitHub-flavored alert syntax (`> [!NOTE]`, `> [!WARNING]`, `> [!TIP]`) for alert boxes in MDX".
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/esp_ldo.mdx` around lines 56 - 64, Convert the
high-risk bullet items under the "Notes" section into GitHub-flavored alert
blocks: wrap the bricking/corruption and channel-routing caution about "Channels
1 and 2" in a > [!WARNING] alert, and turn the "passthrough" mode constraint
(mentioning `passthrough`, `adjustable: true`, and runtime voltage adjustment)
into a > [!NOTE] or > [!WARNING] depending on severity; keep the less-critical
LDO deviation bullet as a plain bullet or a > [!TIP]. Locate the "Notes" heading
and the three list items (text referencing "LDO output voltage", "Channels 1 and
2", and "passthrough") and replace each with the appropriate GFM alert syntax
while preserving the original text and code spans.

41-55: Mirror the passthrough precondition directly in the action intro.

At Line 41, consider explicitly stating that runtime adjust applies only when adjustable: true and voltage is not passthrough, so readers don’t need to cross-reference earlier sections.

✍️ Suggested wording tweak
-If the LDO is configured with ``adjustable: true``, the voltage can be updated at runtime:
+If the LDO is configured with ``adjustable: true`` and ``voltage`` is not ``passthrough``, the voltage can be updated at runtime:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/esp_ldo.mdx` around lines 41 - 55, The action
intro for esp_ldo.voltage.adjust should explicitly state the precondition that
runtime voltage updates only work when the LDO is configured with adjustable:
true and the voltage value is not passthrough; update the text surrounding the
esp_ldo.voltage.adjust example to add a short sentence like “This runtime
adjustment is valid only if the LDO was configured with adjustable: true and the
voltage is not passthrough,” referencing the adjustable: true, voltage, and
passthrough symbols so readers don’t need to cross‑reference earlier sections.
src/content/docs/components/touchscreen/gt911.mdx (1)

47-49: Consider improving readability of the interrupt_pin description.

The description on lines 48-49 is a single 42-word sentence that may be difficult to parse. Consider breaking it into multiple sentences for clarity:

📝 Suggested revision for clarity
-- **interrupt_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The touch detection pin if run to an on-MCU pin.  
-If the touchscreen interrupt signal is wired through an IO Expander rather than directly to an ESP GPIO this will allow for configuration of touchscreen address 
-at boot but will not be used for interrupts and the driver will fall back to polling operation.
+- **interrupt_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The touch detection pin if run to an on-MCU pin. 
+  If the touchscreen interrupt signal is wired through an IO Expander rather than directly to an ESP GPIO, 
+  this pin will be used to configure the touchscreen address at boot. However, it will not be used for interrupt notifications, 
+  and the driver will fall back to polling operation.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/touchscreen/gt911.mdx` around lines 47 - 49, The
interrupt_pin description for the GT911 touchscreen is a long, hard-to-parse
sentence; split it into two concise sentences under the interrupt_pin entry in
gt911.mdx: first state that interrupt_pin is the touch-detection pin used when
wired directly to an MCU GPIO, and second explain that if the interrupt line is
routed via an IO expander you can still configure the touchscreen address at
boot but interrupts won’t be used and the driver will fall back to polling. Keep
wording simple and preserve the optional Pin Schema link and the interrupt_pin
identifier.
lint.mjs (1)

32-35: Unify ignore-list naming to prevent future drift.

There are now multiple ignoreFiles lists in different scopes with different contents. Consider using distinct names (or a shared source) to avoid accidental divergence.

♻️ Suggested refactor
-const ignoreFiles = [
+const lintIgnoreFiles = [
   'script/release_notes_template.mdx',
 ];
...
-    if (ignoreFiles.includes(fname)) {
+    if (lintIgnoreFiles.includes(fname)) {
       continue;
     }
-  const ignoreFiles = [
+  const internalLinkIgnoreFiles = [
     '.claude/instructions.md',
     'script/release_notes_template.md',
+    'script/release_notes_template.mdx',
   ];
-  if (ignoreFiles.includes(fname)) return;
+  if (internalLinkIgnoreFiles.includes(fname)) return;

Also applies to: 462-465

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@lint.mjs` around lines 32 - 35, The repository has multiple
differently-scoped ignore lists named ignoreFiles, which risks drifting
contents; consolidate and rename to a single canonical constant (e.g.,
ROOT_IGNORE_FILES or LINT_IGNORE_LIST) and update all usages to reference that
single symbol. Locate the ignoreFiles declaration shown and the other
occurrences (the other block referenced by the reviewer) and either
export/import the canonical constant or move it to a shared module and replace
the local declarations with references to the shared name so all linting code
reads from one source of truth.
src/content/docs/components/ble_nus.mdx (1)

38-39: Improve sentence structure and capitalization.

The sentence is grammatically incomplete and "python" should be capitalized as a proper noun.

📝 Suggested fix
-`uart` can be used with python BLE Serial
+The `uart` mode can be used with Python BLE Serial.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/ble_nus.mdx` around lines 38 - 39, Rewrite the
incomplete sentence to be grammatically correct and capitalize "Python"; replace
the fragment "`uart` can be used with python BLE Serial" with a full sentence
such as "The `uart` module can be used with Python BLE Serial" (or similar) so
that `uart` remains referenced and "Python" is capitalized.
src/content/docs/components/nrf52.mdx (1)

208-218: Clarify the nesting structure of enable_ota_rollback.

The documentation structure is slightly ambiguous. Line 208 mentions advanced as a mapping under framework, but the enable_ota_rollback option at line 214 appears at the same indentation level as the section header. Consider clarifying that enable_ota_rollback is nested under framework.advanced, and add a YAML example showing the proper structure.

📝 Suggested improvement
 - **advanced** (*Optional*, mapping): See [Advanced Configuration](`#nrf52-advanced_configuration`) below.
 
 <span id="nrf52-advanced_configuration"></span>
 
 ## Advanced Configuration
 
+```yaml
+# Example configuration entry
+nrf52:
+  framework:
+    advanced:
+      enable_ota_rollback: true
+```
+
 - **enable_ota_rollback** (*Optional*, boolean): Enable OTA rollback support. When enabled, the bootloader will
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/nrf52.mdx` around lines 208 - 218, Update the
docs to clarify that enable_ota_rollback is nested under framework.advanced:
explicitly state the path (framework -> advanced -> enable_ota_rollback), move
or indent the bullet so its scope is unambiguous under the "Advanced
Configuration" section (id: nrf52-advanced_configuration), and add a short YAML
example showing the correct structure using the keys nrf52, framework, advanced,
and enable_ota_rollback.
src/content/docs/components/audio_file/index.mdx (1)

10-10: Minor: Hyphenate compound adjective.

"ESP32 based" should be hyphenated as "ESP32-based" when used as a compound adjective modifying "chips".

📝 Suggested fix
-This component only works on ESP32 based chips.
+This component only works on ESP32-based chips.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/audio_file/index.mdx` at line 10, In the docs
text containing the phrase "ESP32 based chips" (in the audio_file component
docs), update the compound adjective to be hyphenated as "ESP32-based chips" so
the modifier is grammatically correct; search for the exact string "ESP32 based"
and replace it with "ESP32-based" in the component's index.mdx content.
src/content/docs/components/sensor/sen6x.mdx (2)

130-132: Use Astro Image import for local images.

Per coding guidelines, single-use images should be imported locally from ./images/ directory using import { Image } from 'astro:assets'. The sen5x.mdx file already imports this same image using the Astro pattern.

📝 Suggested fix

Add the import at the top of the file (after line 6):

 import APIRef from '@components/APIRef.astro';
+
+import { Image } from 'astro:assets';
+import jst6pinImg from './images/jst6pin.png';

Then update line 132:

-![JST GHR-06V-S 6-pin connector](./images/jst6pin.png)
+<Image src={jst6pinImg} layout="constrained" alt="JST GHR-06V-S 6-pin connector" />

As per coding guidelines: "Single-use images should be imported locally from ./images/ directory using import { Image } from 'astro:assets'"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/sensor/sen6x.mdx` around lines 130 - 132, Add an
Astro image import and use the Image component instead of the raw markdown
image: at the top of sen6x.mdx add the import for Image from 'astro:assets' and
import the local asset './images/jst6pin.png' (same pattern used in sen5x.mdx),
then replace the markdown image reference (![JST GHR-06V-S 6-pin
connector](./images/jst6pin.png)) with the Astro Image component that uses the
imported asset and preserves the alt text "JST GHR-06V-S 6-pin connector".

130-130: Minor: Consider hyphenating "6-pin".

For consistency with compound modifiers, "6 pin" should be hyphenated as "6-pin" when used as an adjective.

📝 Suggested fix
-The sensor has a JST GHR-06V-S 6 pin type connector, with a 1.25mm pitch. The cable needs this connector:
+The sensor has a JST GHR-06V-S 6-pin type connector, with a 1.25mm pitch. The cable needs this connector:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/sensor/sen6x.mdx` at line 130, Change the
compound modifier "6 pin" to the hyphenated form "6-pin" in the sentence
containing "JST GHR-06V-S 6 pin type connector" so it reads "JST GHR-06V-S 6-pin
type connector" to follow compound adjective style; update that phrase wherever
it appears in the same sentence or nearby text.
src/content/docs/components/rp2040_ble.mdx (1)

35-38: Consider adding APIRef for consistency.

Other component documentation pages include an <APIRef> link to the header file. For consistency, consider adding a reference to the component's header file.

✏️ Suggested addition
+import APIRef from '@components/APIRef.astro';
+
 ## See Also

 - [RP2040 Platform](/components/rp2040/)
 - [ESP32 BLE Component](/components/esp32_ble/)
+- <APIRef text="rp2040_ble.h" path="rp2040_ble/rp2040_ble.h" />
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/rp2040_ble.mdx` around lines 35 - 38, Add an
<APIRef> link to the component header in the "See Also" section to match other
component docs; update src/content/docs/components/rp2040_ble.mdx by adding an
<APIRef> entry pointing to the RP2040 BLE component header (e.g., rp2040_ble.h)
alongside the existing RP2040 Platform and ESP32 BLE links so the header API is
discoverable and consistent with other pages.
src/content/docs/components/sensor/hdc302x.mdx (2)

22-29: Consider adding descriptive alt text for accessibility.

The alt="" attributes on both images (lines 26 and 29) indicate decorative images. If these images convey meaningful information about the sensor, consider adding descriptive alt text for screen reader users.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/sensor/hdc302x.mdx` around lines 22 - 29, Update
the empty alt attributes on the Figure and Image components to meaningful,
descriptive text if they convey information about the HDC3022 sensor (e.g., set
the alt prop on the Figure component and the alt prop on the Image component to
short descriptions of the images), otherwise explicitly keep alt="" to mark them
as decorative; locate the tags named Figure and Image in this file and change
their alt="" props accordingly.

178-178: Hyphenate compound adjective for consistency.

"High Precision" modifies "Temperature and Humidity Sensor" and should be hyphenated.

✏️ Suggested fix
-- [HDC2010 High Precision Temperature and Humidity Sensor](/components/sensor/hdc2010/)
+- [HDC2010 High-Precision Temperature and Humidity Sensor](/components/sensor/hdc2010/)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/sensor/hdc302x.mdx` at line 178, Update the link
text "[HDC2010 High Precision Temperature and Humidity
Sensor](/components/sensor/hdc2010/)" to hyphenate the compound adjective by
changing "High Precision" to "High-Precision" so it reads "[HDC2010
High-Precision Temperature and Humidity Sensor](/components/sensor/hdc2010/)".
script/release_notes_template.mdx (1)

152-159: Empty <summary> tag may need placeholder content.

The <summary> tag on line 153 is empty. If this is intentionally left blank for auto-population by the release notes generator script, consider adding a placeholder comment to clarify this.

<details>
<summary>{/* AUTO: Summary text will be inserted here */}</summary>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@script/release_notes_template.mdx` around lines 152 - 159, The empty
<summary> tag inside the release notes template (the <details> block surrounding
the AUTO_GENERATED_ALL_CHANGES markers) should include a small placeholder
comment so future readers know it’s intentionally left for auto-population;
update the <summary> in script/release_notes_template.mdx (the
<details>/<summary> block that contains the AUTO_GENERATED_ALL_CHANGES_START/END
markers) to contain a brief comment like “AUTO: Summary will be inserted here”
so the intent is explicit without changing generation behavior.
src/content/docs/components/media_source/index.mdx (1)

21-23: Consider adding content to the Platforms and See Also sections.

The "Platforms" and "See Also" sections are empty. Based on related files in this PR, consider adding:

  • Under Platforms: audio_file platform reference
  • Under See Also: Links to /components/media_source/audio_file/ and related media player components

If these sections are intentional placeholders for auto-generation or future expansion, this can be ignored.

Suggested content
 ## Platforms
 
+- [Audio File](/components/media_source/audio_file/): Play audio files embedded in firmware
+
 ## See Also
+
+- [Audio File Media Source](/components/media_source/audio_file/)
+- [Speaker Media Player](/components/media_player/speaker/)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/media_source/index.mdx` around lines 21 - 23, Add
entries under the empty "Platforms" and "See Also" headings in
src/content/docs/components/media_source/index.mdx: under "Platforms" list the
audio_file platform reference (e.g., mention audio_file and brief description),
and under "See Also" add links to /components/media_source/audio_file/ and
relevant media player components (reference the media player pages used
elsewhere in the PR). Update the headings' content so they are not blank and
ensure link paths match the existing routes used in the repo.
script/generate_release_notes.py (1)

711-720: Make ImgTable preservation whitespace-tolerant.

These regexes only match <ImgTable items={[...]} /> with that exact spacing. A prettified or hand-edited MDX block with line breaks, extra spaces, or /> on its own line will stop matching here, and reassembly will drop the curated image table instead of preserving it.

♻️ More tolerant pattern
+        imgtable_pattern = r"<ImgTable\b[^>]*\bitems=\{\s*\[.*?\]\s*\}\s*/>"
         existing_imgtable = None
         existing_full_list = None
         if output_file.exists():
             existing_content = output_file.read_text()

             # Extract existing ImgTable content
             imgtable_match = re.search(
-                r"<ImgTable items=\{\[.*?\]\} />", existing_content, re.DOTALL
+                imgtable_pattern, existing_content, re.DOTALL
             )
             if imgtable_match:
                 items_content = imgtable_match.group(0)
                 # Only preserve if it has actual entries (not just comments/empty)
-                if re.search(r'\[".+?"', items_content):
+                if re.search(r"\[\s*\[\s*['\"]", items_content, re.DOTALL):
                     existing_imgtable = items_content
                     print("✓ Preserving existing ImgTable")
...
         if existing_imgtable:
             template = re.sub(
-                r"<ImgTable items=\{\[.*?\]\} />",
+                imgtable_pattern,
                 existing_imgtable,
                 template,
                 flags=re.DOTALL,
             )

Also applies to: 817-821

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@script/generate_release_notes.py` around lines 711 - 720, The current regex
that finds the ImgTable block is too strict about spacing and newlines; update
the search in the imgtable_match logic to use a whitespace-tolerant pattern
(e.g. allow arbitrary spaces/newlines around tags, braces and the self-closing
slash) and keep re.DOTALL; replace the existing pattern used in the re.search
call (and the similar one at the second occurrence) with something like
r"<ImgTable\s+items=\{\s*\[.*?\]\s*\}\s*/?>" and continue using re.DOTALL; also
relax the entries check on items_content from re.search(r'\[".+?"') to a
whitespace-tolerant check such as re.search(r'\[\s*"[^"]+') so existing_imgtable
and the print("✓ Preserving existing ImgTable") are preserved when formatting
differs.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@script/generate_release_notes.py`:
- Around line 751-759: The code treats upgrade_checklist.md and
undocumented_api_changes.md as optional by reading them if the files exist and
not validating contents, allowing --assemble to proceed with missing or stale
data; update the logic around upgrade_checklist_file/upgrade_checklist and
undocumented_api_file/undocumented_api so that upgrade_checklist is required
(fail/raise/log an error when the file is missing or empty) and undocumented_api
is only used if the current run actually needs it (guard by the presence of the
undocumented-api-change label or an explicit flag), and clear or ignore any
stale undocumented_api file when it is not applicable; locate and modify the
code that uses self.responses_dir / "upgrade_checklist.md" and
self.responses_dir / "undocumented_api_changes.md" to enforce these checks and
fail fast for missing mandatory content.

In `@src/content/docs/components/cc1101.mdx`:
- Around line 191-200: The docs for the cc1101.set_frequency configuration list
the value field but don’t mark it as templatable even though examples use
!lambda; update the three occurrences of the "value" field description in
src/content/docs/components/cc1101.mdx (the sections describing the value
parameter for cc1101.set_frequency) to include the
[templatable](/automations/templates) annotation (e.g., change "- **value**
(**Required**, frequency):" to "- **value**
([templatable](/automations/templates), **Required**, frequency):") so the
schema text matches the !lambda examples shown.

In `@src/content/docs/components/http_request.mdx`:
- Around line 48-52: The description for tls_buffer_size_rx contains a sentence
fragment; replace the fragment "Should be set to `16384` to fit the TLS record
size of modern HTTP servers." with a complete sentence that states the
recommendation and reason (for example: "Set this to 16384 to accommodate the
TLS record size used by modern HTTP servers."), ensuring the paragraph remains
about default behavior and RAM implications referenced by tls_buffer_size_rx.

In `@src/content/docs/components/media_player/index.mdx`:
- Around line 189-199: The docs for media_player.group_join are missing what
selects the target group; update the `media_player.group_join` section to state
the required input (e.g., the entity_id(s) of the media player(s) to add and the
group identifier or master entity to join), describe any optional parameters,
and show a minimal YAML/example service call. Specifically mention the exact
parameter names used by the service (reference `media_player.group_join` and
`entity_id`/`group_id` or `master` as appropriate), explain the default behavior
when no explicit group is provided, and include a short example call
demonstrating how to pass the parameters.

In `@src/content/docs/components/media_player/speaker_source.mdx`:
- Around line 140-145: Update the docs to accurately list supported base media
player actions and explain pipeline targeting: in speaker_source.mdx replace the
blanket "supports all media player actions" claim with the explicit subset that
matches components/media_player/index.mdx (include play_media, turn_on,
turn_off, group_join if supported or remove them if not), and add a short note
describing how media_player.play_media routes a URL to the first matching
pipeline source and how the announcement flag selects the announcement pipeline.
Reference the action names (media_player.play_media, turn_on, turn_off,
group_join) and the announcement flag so readers can cross-check with the base
media_player index page.

In `@src/content/docs/components/media_player/speaker.mdx`:
- Line 170: Replace the phrase "memory constrained device" with the hyphenated
compound adjective "memory-constrained device" in the sentence about decoding
audio files—locate the string "To use the component on a memory constrained
device" in src/content/docs/components/media_player/speaker.mdx and update it to
"To use the component on a memory-constrained device".

In `@src/content/docs/components/media_source/audio_file.mdx`:
- Line 14: Replace the unhyphenated phrase "ESP32 based chips" with the
hyphenated compound adjective "ESP32-based chips" in the audio_file.mdx content
(and update any other occurrences of the same phrase in related ESPHome docs);
locate the sentence containing "ESP32 based chips" and edit it to read
"ESP32-based chips" to match the project's grammatical convention.
- Line 45: Update the APIRef path string in the APIRef element so it uses the
flattened path format: remove the "esphome/components/" prefix from the existing
path "esphome/components/audio_file/media_source/audio_file_media_source.h" and
change it to "audio_file/media_source/audio_file_media_source.h" to match other
APIRef entries; the change should be made in the APIRef element in
src/content/docs/components/media_source/audio_file.mdx.

In `@src/content/docs/components/modbus.mdx`:
- Line 55: The sentence describing CRC troubleshooting is ambiguous: replace the
phrase "Try increasing times above first" with explicit field names and guidance
(e.g., "Try increasing the request timeout (timeout) and/or the retry count
(retries) if you see CRC errors") so readers know which settings to change;
update the sentence near the disable_crc option in
src/content/docs/components/modbus.mdx to reference the exact configuration keys
used elsewhere in the docs (replace the placeholder with the actual field names
if they differ) and keep the note that disable_crc defaults to false.

In `@src/content/docs/components/ota/zephyr_mcumgr.mdx`:
- Line 25: The doc has conflicting defaults for the Zephyr MCUmgr OTA transport:
the "transport" section at the `transport` mapping currently states `ble: true`
while another spot states `ble: false`; confirm the actual default in the
implementation and make both descriptions consistent by updating the `transport`
mapping example and the later default statement to match the real default
(change the `ble: true`/`ble: false` text so both occurrences of `ble` reflect
the implementation). Ensure you update the `transport` mapping example and the
later sentence that mentions the default BLE value so they match exactly.

In `@src/content/docs/components/sensor/lis2dw12.mdx`:
- Around line 12-15: Update the lis2dw12 component docs to state that standard
I²C device options are supported by this platform and show the relevant option
names; explicitly mention that users can set address and i2c_id (and other
inherited I2C device settings) in the lis2dw12 config and link or reference the
main I²C component docs for full option descriptions. Edit the lis2dw12
configuration section (the lis2dw12 sensor/platform documentation) to add a
short paragraph and a concise example snippet calling out address and i2c_id
usage so users with non-default addresses or multiple I²C buses know to use
those fields.

---

Outside diff comments:
In `@src/content/docs/guides/troubleshooting.mdx`:
- Line 12: Replace the incorrect branding instance "Esphome" with the proper
"ESPHome" in the documentation sentence (the snippet containing "instructions,
see [Installing Esphome](/guides/installing_esphome/)."); update the link text
to read "Installing ESPHome" while leaving the href unchanged.
- Line 90: Replace the lowercase-acronym instance "Cli" in the sentence "Then
use the command line interface (see the [Cli](/guides/cli/) guide for full
details):" with the uppercase form "CLI" and update the link text accordingly so
it reads "... (see the [CLI](/guides/cli/) guide for full details):".
- Line 204: Replace the link text "Esp32" with the correctly capitalized "ESP32"
in the sentence "When using the ESP-IDF framework on
[Esp32](/components/esp32/)," (leave the URL /components/esp32/ as-is) so the
visible text reads "When using the ESP-IDF framework on
[ESP32](/components/esp32/),".

---

Nitpick comments:
In `@lint.mjs`:
- Around line 32-35: The repository has multiple differently-scoped ignore lists
named ignoreFiles, which risks drifting contents; consolidate and rename to a
single canonical constant (e.g., ROOT_IGNORE_FILES or LINT_IGNORE_LIST) and
update all usages to reference that single symbol. Locate the ignoreFiles
declaration shown and the other occurrences (the other block referenced by the
reviewer) and either export/import the canonical constant or move it to a shared
module and replace the local declarations with references to the shared name so
all linting code reads from one source of truth.

In `@script/generate_release_notes.py`:
- Around line 711-720: The current regex that finds the ImgTable block is too
strict about spacing and newlines; update the search in the imgtable_match logic
to use a whitespace-tolerant pattern (e.g. allow arbitrary spaces/newlines
around tags, braces and the self-closing slash) and keep re.DOTALL; replace the
existing pattern used in the re.search call (and the similar one at the second
occurrence) with something like r"<ImgTable\s+items=\{\s*\[.*?\]\s*\}\s*/?>" and
continue using re.DOTALL; also relax the entries check on items_content from
re.search(r'\[".+?"') to a whitespace-tolerant check such as
re.search(r'\[\s*"[^"]+') so existing_imgtable and the print("✓ Preserving
existing ImgTable") are preserved when formatting differs.

In `@script/release_notes_template.mdx`:
- Around line 152-159: The empty <summary> tag inside the release notes template
(the <details> block surrounding the AUTO_GENERATED_ALL_CHANGES markers) should
include a small placeholder comment so future readers know it’s intentionally
left for auto-population; update the <summary> in
script/release_notes_template.mdx (the <details>/<summary> block that contains
the AUTO_GENERATED_ALL_CHANGES_START/END markers) to contain a brief comment
like “AUTO: Summary will be inserted here” so the intent is explicit without
changing generation behavior.

In `@src/content/docs/components/audio_file/index.mdx`:
- Line 10: In the docs text containing the phrase "ESP32 based chips" (in the
audio_file component docs), update the compound adjective to be hyphenated as
"ESP32-based chips" so the modifier is grammatically correct; search for the
exact string "ESP32 based" and replace it with "ESP32-based" in the component's
index.mdx content.

In `@src/content/docs/components/ble_nus.mdx`:
- Around line 38-39: Rewrite the incomplete sentence to be grammatically correct
and capitalize "Python"; replace the fragment "`uart` can be used with python
BLE Serial" with a full sentence such as "The `uart` module can be used with
Python BLE Serial" (or similar) so that `uart` remains referenced and "Python"
is capitalized.

In `@src/content/docs/components/esp_ldo.mdx`:
- Around line 56-64: Convert the high-risk bullet items under the "Notes"
section into GitHub-flavored alert blocks: wrap the bricking/corruption and
channel-routing caution about "Channels 1 and 2" in a > [!WARNING] alert, and
turn the "passthrough" mode constraint (mentioning `passthrough`, `adjustable:
true`, and runtime voltage adjustment) into a > [!NOTE] or > [!WARNING]
depending on severity; keep the less-critical LDO deviation bullet as a plain
bullet or a > [!TIP]. Locate the "Notes" heading and the three list items (text
referencing "LDO output voltage", "Channels 1 and 2", and "passthrough") and
replace each with the appropriate GFM alert syntax while preserving the original
text and code spans.
- Around line 41-55: The action intro for esp_ldo.voltage.adjust should
explicitly state the precondition that runtime voltage updates only work when
the LDO is configured with adjustable: true and the voltage value is not
passthrough; update the text surrounding the esp_ldo.voltage.adjust example to
add a short sentence like “This runtime adjustment is valid only if the LDO was
configured with adjustable: true and the voltage is not passthrough,”
referencing the adjustable: true, voltage, and passthrough symbols so readers
don’t need to cross‑reference earlier sections.

In `@src/content/docs/components/esp32_hosted.mdx`:
- Around line 47-49: Add explicit type metadata for the sdio_frequency property
in the docs: update the existing line for **sdio_frequency** to include its type
(e.g., "*Optional*, type: number (Hz)" or "integer (Hz)") alongside the optional
marker and default value so it matches the other variables' metadata and
improves scanability; reference the sdio_frequency entry and ensure the text
still mentions valid range (400KHz–50MHz) and default 40MHz.

In `@src/content/docs/components/logger.mdx`:
- Around line 71-76: Update the docs for the two options wait_for_cdc and
early_message to match the existing platform-specific formatting and include
default values: change the platform note from "Only on nRF52." to the inline
bold style "**nRF52 only**:" and append the default for each boolean (e.g.,
"Defaults to false") after the description. Locate the option entries for
wait_for_cdc and early_message in the logger docs and apply the same
phrasing/format as the existing option at line 48 to keep style consistent;
verify the actual defaults in the implementation before committing.

In `@src/content/docs/components/media_source/index.mdx`:
- Around line 21-23: Add entries under the empty "Platforms" and "See Also"
headings in src/content/docs/components/media_source/index.mdx: under
"Platforms" list the audio_file platform reference (e.g., mention audio_file and
brief description), and under "See Also" add links to
/components/media_source/audio_file/ and relevant media player components
(reference the media player pages used elsewhere in the PR). Update the
headings' content so they are not blank and ensure link paths match the existing
routes used in the repo.

In `@src/content/docs/components/nrf52.mdx`:
- Around line 208-218: Update the docs to clarify that enable_ota_rollback is
nested under framework.advanced: explicitly state the path (framework ->
advanced -> enable_ota_rollback), move or indent the bullet so its scope is
unambiguous under the "Advanced Configuration" section (id:
nrf52-advanced_configuration), and add a short YAML example showing the correct
structure using the keys nrf52, framework, advanced, and enable_ota_rollback.

In `@src/content/docs/components/rp2040_ble.mdx`:
- Around line 35-38: Add an <APIRef> link to the component header in the "See
Also" section to match other component docs; update
src/content/docs/components/rp2040_ble.mdx by adding an <APIRef> entry pointing
to the RP2040 BLE component header (e.g., rp2040_ble.h) alongside the existing
RP2040 Platform and ESP32 BLE links so the header API is discoverable and
consistent with other pages.

In `@src/content/docs/components/sensor/hdc302x.mdx`:
- Around line 22-29: Update the empty alt attributes on the Figure and Image
components to meaningful, descriptive text if they convey information about the
HDC3022 sensor (e.g., set the alt prop on the Figure component and the alt prop
on the Image component to short descriptions of the images), otherwise
explicitly keep alt="" to mark them as decorative; locate the tags named Figure
and Image in this file and change their alt="" props accordingly.
- Line 178: Update the link text "[HDC2010 High Precision Temperature and
Humidity Sensor](/components/sensor/hdc2010/)" to hyphenate the compound
adjective by changing "High Precision" to "High-Precision" so it reads "[HDC2010
High-Precision Temperature and Humidity Sensor](/components/sensor/hdc2010/)".

In `@src/content/docs/components/sensor/sen6x.mdx`:
- Around line 130-132: Add an Astro image import and use the Image component
instead of the raw markdown image: at the top of sen6x.mdx add the import for
Image from 'astro:assets' and import the local asset './images/jst6pin.png'
(same pattern used in sen5x.mdx), then replace the markdown image reference
(![JST GHR-06V-S 6-pin connector](./images/jst6pin.png)) with the Astro Image
component that uses the imported asset and preserves the alt text "JST GHR-06V-S
6-pin connector".
- Line 130: Change the compound modifier "6 pin" to the hyphenated form "6-pin"
in the sentence containing "JST GHR-06V-S 6 pin type connector" so it reads "JST
GHR-06V-S 6-pin type connector" to follow compound adjective style; update that
phrase wherever it appears in the same sentence or nearby text.

In `@src/content/docs/components/touchscreen/gt911.mdx`:
- Around line 47-49: The interrupt_pin description for the GT911 touchscreen is
a long, hard-to-parse sentence; split it into two concise sentences under the
interrupt_pin entry in gt911.mdx: first state that interrupt_pin is the
touch-detection pin used when wired directly to an MCU GPIO, and second explain
that if the interrupt line is routed via an IO expander you can still configure
the touchscreen address at boot but interrupts won’t be used and the driver will
fall back to polling. Keep wording simple and preserve the optional Pin Schema
link and the interrupt_pin identifier.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 05b86ddb-4f1e-4f5e-add1-262a4dcc4120

📥 Commits

Reviewing files that changed from the base of the PR and between 4a35bec and a899579.

⛔ Files ignored due to path filters (4)
  • public/images/hdc302x.svg is excluded by !**/*.svg
  • public/images/lis2dw12.jpg is excluded by !**/*.jpg
  • src/content/docs/components/sensor/images/hdc302x-full.png is excluded by !**/*.png
  • src/content/docs/components/sensor/images/jst6pin.png is excluded by !**/*.png
📒 Files selected for processing (63)
  • .gitattributes
  • data/version.yaml
  • lint.mjs
  • public/images/sen6x.webp
  • script/generate_release_notes.py
  • script/prompt_templates/breaking_changes.txt
  • script/release_notes_template.mdx
  • src/content/docs/changelog/2026.3.0.mdx
  • src/content/docs/components/audio_file/index.mdx
  • src/content/docs/components/binary_sensor/esp32_touch.mdx
  • src/content/docs/components/ble_nus.mdx
  • src/content/docs/components/cc1101.mdx
  • src/content/docs/components/display/epaper_spi.mdx
  • src/content/docs/components/display/mipi_dsi.mdx
  • src/content/docs/components/display/mipi_spi.mdx
  • src/content/docs/components/display/nextion.mdx
  • src/content/docs/components/esp32.mdx
  • src/content/docs/components/esp32_ble.mdx
  • src/content/docs/components/esp32_ble_server.mdx
  • src/content/docs/components/esp32_camera.mdx
  • src/content/docs/components/esp32_hosted.mdx
  • src/content/docs/components/esp8266.mdx
  • src/content/docs/components/esp_ldo.mdx
  • src/content/docs/components/http_request.mdx
  • src/content/docs/components/index.mdx
  • src/content/docs/components/logger.mdx
  • src/content/docs/components/media_player/index.mdx
  • src/content/docs/components/media_player/speaker.mdx
  • src/content/docs/components/media_player/speaker_source.mdx
  • src/content/docs/components/media_source/audio_file.mdx
  • src/content/docs/components/media_source/index.mdx
  • src/content/docs/components/modbus.mdx
  • src/content/docs/components/modbus_controller.mdx
  • src/content/docs/components/mqtt.mdx
  • src/content/docs/components/nrf52.mdx
  • src/content/docs/components/online_image.mdx
  • src/content/docs/components/openthread.mdx
  • src/content/docs/components/ota/esphome.mdx
  • src/content/docs/components/ota/http_request.mdx
  • src/content/docs/components/ota/index.mdx
  • src/content/docs/components/ota/web_server.mdx
  • src/content/docs/components/ota/zephyr_mcumgr.mdx
  • src/content/docs/components/rp2040.mdx
  • src/content/docs/components/rp2040_ble.mdx
  • src/content/docs/components/safe_mode.mdx
  • src/content/docs/components/sensor/dew_point.mdx
  • src/content/docs/components/sensor/hdc302x.mdx
  • src/content/docs/components/sensor/integration.mdx
  • src/content/docs/components/sensor/lis2dw12.mdx
  • src/content/docs/components/sensor/lps22.mdx
  • src/content/docs/components/sensor/sen5x.mdx
  • src/content/docs/components/sensor/sen6x.mdx
  • src/content/docs/components/serial_proxy.mdx
  • src/content/docs/components/text_sensor/version.mdx
  • src/content/docs/components/touchscreen/gt911.mdx
  • src/content/docs/components/uart.mdx
  • src/content/docs/components/usb_uart.mdx
  • src/content/docs/components/vbus.mdx
  • src/content/docs/components/wifi.mdx
  • src/content/docs/guides/cli.mdx
  • src/content/docs/guides/security_best_practices.mdx
  • src/content/docs/guides/supporters.mdx
  • src/content/docs/guides/troubleshooting.mdx
💤 Files with no reviewable changes (3)
  • src/content/docs/guides/security_best_practices.mdx
  • src/content/docs/components/mqtt.mdx
  • src/content/docs/guides/cli.mdx

Comment on lines +751 to +759
upgrade_checklist_file = self.responses_dir / "upgrade_checklist.md"
upgrade_checklist = ""
if upgrade_checklist_file.exists():
upgrade_checklist = upgrade_checklist_file.read_text().strip()

undocumented_api_file = self.responses_dir / "undocumented_api_changes.md"
undocumented_api = ""
if undocumented_api_file.exists():
undocumented_api = undocumented_api_file.read_text().strip()
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Don't let --assemble silently skip required AI output.

The second prompt is now always generated because the upgrade checklist is mandatory, but Lines 751-759 still treat a missing or empty upgrade_checklist.md as optional. That lets --assemble succeed with an incomplete changelog. Separately, undocumented_api_changes.md is read whenever the file exists, so a stale response from an earlier run can be injected even when the current PR set no longer has any undocumented-api-change labels.

💡 Suggested guardrails
-        upgrade_checklist_file = self.responses_dir / "upgrade_checklist.md"
-        upgrade_checklist = ""
-        if upgrade_checklist_file.exists():
-            upgrade_checklist = upgrade_checklist_file.read_text().strip()
-
-        undocumented_api_file = self.responses_dir / "undocumented_api_changes.md"
-        undocumented_api = ""
-        if undocumented_api_file.exists():
-            undocumented_api = undocumented_api_file.read_text().strip()
+        upgrade_checklist_file = self.responses_dir / "upgrade_checklist.md"
+        upgrade_checklist = (
+            upgrade_checklist_file.read_text().strip()
+            if upgrade_checklist_file.exists()
+            else ""
+        )
+        if not upgrade_checklist:
+            print(f"Error: Missing AI response: {upgrade_checklist_file}")
+            print("Please run the breaking_changes.txt prompt through Claude first")
+            return False
+
+        undocumented_api = ""
...
         prs = self.load_prs_by_numbers(pr_numbers)
+        needs_undocumented_api = any(
+            LABEL_UNDOCUMENTED_API_CHANGE in pr.labels for pr in prs
+        )
+        if needs_undocumented_api:
+            undocumented_api_file = self.responses_dir / "undocumented_api_changes.md"
+            undocumented_api = (
+                undocumented_api_file.read_text().strip()
+                if undocumented_api_file.exists()
+                else ""
+            )
+            if not undocumented_api:
+                print(f"Error: Missing AI response: {undocumented_api_file}")
+                print("Please run the breaking_changes.txt prompt through Claude first")
+                return False
-        if upgrade_checklist:
-            template = self._replace_marker_content(
-                template, "UPGRADE_CHECKLIST", upgrade_checklist
-            )
+        template = self._replace_marker_content(
+            template, "UPGRADE_CHECKLIST", upgrade_checklist
+        )

Also applies to: 784-788, 799-803

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@script/generate_release_notes.py` around lines 751 - 759, The code treats
upgrade_checklist.md and undocumented_api_changes.md as optional by reading them
if the files exist and not validating contents, allowing --assemble to proceed
with missing or stale data; update the logic around
upgrade_checklist_file/upgrade_checklist and
undocumented_api_file/undocumented_api so that upgrade_checklist is required
(fail/raise/log an error when the file is missing or empty) and undocumented_api
is only used if the current run actually needs it (guard by the presence of the
undocumented-api-change label or an explicit flag), and clear or ignore any
stale undocumented_api file when it is not applicable; locate and modify the
code that uses self.responses_dir / "upgrade_checklist.md" and
self.responses_dir / "undocumented_api_changes.md" to enforce these checks and
fail fast for missing mandatory content.

Comment on lines +191 to +200
#### Configuration variables

- **value** (**Required**, frequency):
The frequency to set. Range: `300MHz` to `928MHz`.

```yaml
on_...:
- cc1101.set_frequency: 433.92MHz
- cc1101.set_frequency:
value: !lambda "return 868.0e6;"
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Mark value as templatable where !lambda is documented.

Lines 193, 217, and 242 describe value as a plain literal field, but the examples on Lines 199-200, 224-225, and 249-250 use !lambda. Please add the [templatable](/automations/templates) annotation here so the config schema matches the examples.

Also applies to: 215-225, 240-250

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/cc1101.mdx` around lines 191 - 200, The docs for
the cc1101.set_frequency configuration list the value field but don’t mark it as
templatable even though examples use !lambda; update the three occurrences of
the "value" field description in src/content/docs/components/cc1101.mdx (the
sections describing the value parameter for cc1101.set_frequency) to include the
[templatable](/automations/templates) annotation (e.g., change "- **value**
(**Required**, frequency):" to "- **value**
([templatable](/automations/templates), **Required**, frequency):") so the
schema text matches the !lambda examples shown.

Comment on lines +48 to +52
- **tls_buffer_size_rx** (*Optional*, integer): Change TLS receive buffer size. Should be set to `16384` to fit the TLS
record size of modern HTTP servers. This will increase RAM usage significantly and may require removing other
components to free up RAM. You can check the max free heap block using the [Debug Component](/components/debug/). If
the server is configured to support the MFL TLS extension then this can be reduced, but most popular servers (Traefik,
Caddy, Cloudflare) don't support it and nginx has it disabled by default. Defaults to `512`.
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Complete the sentence at Line 48 for readability.

The phrase “Should be set to 16384...” is a sentence fragment. Rewording it as a full sentence improves documentation clarity.

✏️ Suggested edit
-- **tls_buffer_size_rx** (*Optional*, integer): Change TLS receive buffer size. Should be set to `16384` to fit the TLS
+- **tls_buffer_size_rx** (*Optional*, integer): Change TLS receive buffer size. Set this to `16384` to fit the TLS
   record size of modern HTTP servers. This will increase RAM usage significantly and may require removing other
   components to free up RAM. You can check the max free heap block using the [Debug Component](/components/debug/). If
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **tls_buffer_size_rx** (*Optional*, integer): Change TLS receive buffer size. Should be set to `16384` to fit the TLS
record size of modern HTTP servers. This will increase RAM usage significantly and may require removing other
components to free up RAM. You can check the max free heap block using the [Debug Component](/components/debug/). If
the server is configured to support the MFL TLS extension then this can be reduced, but most popular servers (Traefik,
Caddy, Cloudflare) don't support it and nginx has it disabled by default. Defaults to `512`.
- **tls_buffer_size_rx** (*Optional*, integer): Change TLS receive buffer size. Set this to `16384` to fit the TLS
record size of modern HTTP servers. This will increase RAM usage significantly and may require removing other
components to free up RAM. You can check the max free heap block using the [Debug Component](/components/debug/). If
the server is configured to support the MFL TLS extension then this can be reduced, but most popular servers (Traefik,
Caddy, Cloudflare) don't support it and nginx has it disabled by default. Defaults to `512`.
🧰 Tools
🪛 LanguageTool

[style] ~48-~48: To form a complete sentence, be sure to include a subject.
Context: ...teger): Change TLS receive buffer size. Should be set to 16384 to fit the TLS reco...

(MISSING_IT_THERE)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/http_request.mdx` around lines 48 - 52, The
description for tls_buffer_size_rx contains a sentence fragment; replace the
fragment "Should be set to `16384` to fit the TLS record size of modern HTTP
servers." with a complete sentence that states the recommendation and reason
(for example: "Set this to 16384 to accommodate the TLS record size used by
modern HTTP servers."), ensuring the paragraph remains about default behavior
and RAM implications referenced by tls_buffer_size_rx.

Comment on lines +189 to +199
<span id="media_player-group_join"></span>

### `media_player.group_join` Action

This action will join the media player to a group.

<span id="media_player-clear_playlist"></span>

### `media_player.clear_playlist` Action

This action will clear the media player's playlist.
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Document how media_player.group_join selects its target group.

Lines 191-193 introduce the action, but unlike media_player.play_media and media_player.volume_set, this section never describes any action-specific input or example. As written, the docs still don't tell the reader what to pass to actually join a group. Please add the required parameter(s) or explain how the default target is determined.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/media_player/index.mdx` around lines 189 - 199,
The docs for media_player.group_join are missing what selects the target group;
update the `media_player.group_join` section to state the required input (e.g.,
the entity_id(s) of the media player(s) to add and the group identifier or
master entity to join), describe any optional parameters, and show a minimal
YAML/example service call. Specifically mention the exact parameter names used
by the service (reference `media_player.group_join` and `entity_id`/`group_id`
or `master` as appropriate), explain the default behavior when no explicit group
is provided, and include a short example call demonstrating how to pass the
parameters.

Comment on lines +140 to +145
### Base Media Player Actions

This platform supports all [media player actions](/components/media_player#media_player-actions) including `play`, `pause`, `stop`, `toggle`, `volume_set`, `volume_up`, `volume_down`, `mute`, `unmute`, `next`, `previous`, `repeat_off`, `repeat_one`, `repeat_all`, `shuffle`, `unshuffle`, and `clear_playlist`.

When using the `media_player.play_media` action, the media URL is routed to the first source in the pipeline that can handle the URI prefix. For example, a URL starting with `audio-file://` is routed to an Audio File media source.

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Clarify which base actions are actually supported and how they target a pipeline.

This section says the platform supports all media player actions, but the list on Line 142 omits play_media, turn_on, turn_off, and group_join from src/content/docs/components/media_player/index.mdx, and Line 144 immediately relies on media_player.play_media. It also never points readers to the base announcement flag that selects the announcement pipeline. Please either narrow the claim to the supported subset or document the full set plus pipeline selection.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/media_player/speaker_source.mdx` around lines 140
- 145, Update the docs to accurately list supported base media player actions
and explain pipeline targeting: in speaker_source.mdx replace the blanket
"supports all media player actions" claim with the explicit subset that matches
components/media_player/index.mdx (include play_media, turn_on, turn_off,
group_join if supported or remove them if not), and add a short note describing
how media_player.play_media routes a URL to the first matching pipeline source
and how the announcement flag selects the announcement pipeline. Reference the
action names (media_player.play_media, turn_on, turn_off, group_join) and the
announcement flag so readers can cross-check with the base media_player index
page.

Files are played using the `audio-file://` URI scheme; the part after `audio-file://` is used as the
`id` of the audio file to play.

This component only works on ESP32 based chips.
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Minor: Consider using hyphenated compound adjective.

"ESP32 based chips" should be "ESP32-based chips" for grammatical correctness. This pattern appears in other ESPHome docs.

Proposed fix
-This component only works on ESP32 based chips.
+This component only works on ESP32-based chips.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
This component only works on ESP32 based chips.
This component only works on ESP32-based chips.
🧰 Tools
🪛 LanguageTool

[grammar] ~14-~14: Use a hyphen to join words.
Context: ...lay. This component only works on ESP32 based chips. ```yaml # Example configur...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/media_source/audio_file.mdx` at line 14, Replace
the unhyphenated phrase "ESP32 based chips" with the hyphenated compound
adjective "ESP32-based chips" in the audio_file.mdx content (and update any
other occurrences of the same phrase in related ESPHome docs); locate the
sentence containing "ESP32 based chips" and edit it to read "ESP32-based chips"
to match the project's grammatical convention.


- [Audio File Component](/components/audio_file/)
- [Media Source Components](/components/media_source/)
- <APIRef text="audio_file_media_source.h" path="esphome/components/audio_file/media_source/audio_file_media_source.h" />
Copy link
Contributor

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

🏁 Script executed:

#!/bin/bash
# Check for consistency in APIRef path formats across the codebase
rg -n 'APIRef.*path=' --type=mdx | head -20

Repository: esphome/esphome-docs

Length of output: 91


🏁 Script executed:

#!/bin/bash
# Find all MDX files and search for APIRef patterns
fd '\.mdx$' --type f | head -30

Repository: esphome/esphome-docs

Length of output: 1254


🏁 Script executed:

#!/bin/bash
# Search for APIRef usage in all files (mdx, jsx, tsx, etc.)
rg -n 'APIRef.*path=' . --type-add 'mdx:*.mdx' --type mdx 2>/dev/null || rg -n 'APIRef.*path=' --include='*.mdx' | head -30

Repository: esphome/esphome-docs

Length of output: 50376


🏁 Script executed:

#!/bin/bash
# More direct approach: search for APIRef in .mdx files
find src/content/docs -name "*.mdx" -type f -exec grep -n 'APIRef.*path=' {} + 2>/dev/null | head -30

Repository: esphome/esphome-docs

Length of output: 3827


🏁 Script executed:

#!/bin/bash
# Search for all audio_file references in MDX files
find src/content/docs -name "*.mdx" -type f -exec grep -n 'audio_file' {} + | grep -i apiref

Repository: esphome/esphome-docs

Length of output: 379


🏁 Script executed:

#!/bin/bash
# Look at the actual file to see context
grep -n -A 2 -B 2 'APIRef.*audio_file' src/content/docs/components/media_source/audio_file.mdx

Repository: esphome/esphome-docs

Length of output: 299


🏁 Script executed:

#!/bin/bash
# Check what the pattern should be - look for similar component references
# Check if there are other nested component references with esphome/ prefix
rg 'path="esphome/' src/content/docs --type mdx -c

Repository: esphome/esphome-docs

Length of output: 91


Fix the API reference path to match the standard format used throughout the codebase.

The path esphome/components/audio_file/media_source/audio_file_media_source.h includes the esphome/components/ prefix, which is inconsistent with all other APIRef paths in the documentation. Remove the esphome/components/ prefix so the path reads: audio_file/media_source/audio_file_media_source.h. This matches the flattened path format used consistently across the rest of the codebase (e.g., alarm_control_panel/alarm_control_panel.h, api/api_server.h).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/media_source/audio_file.mdx` at line 45, Update
the APIRef path string in the APIRef element so it uses the flattened path
format: remove the "esphome/components/" prefix from the existing path
"esphome/components/audio_file/media_source/audio_file_media_source.h" and
change it to "audio_file/media_source/audio_file_media_source.h" to match other
APIRef entries; the change should be made in the APIRef element in
src/content/docs/components/media_source/audio_file.mdx.

This value is ideally set to the maximum time required for the slowest device on the bus to process a message and be ready to process another. Note that all devices will receive all messages and will require time to process them even if they don't need to reply.
If devices don't respond sometimes, it can help to increase this value.

- **disable_crc** (*Optional*, boolean): If set to `true`, invalid CRC values are ignored. This will reduce error messages but will not fix communication issues. Try increasing times above first if you see CRC errors. Defaults to `false`.
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Clarify wording in CRC troubleshooting guidance.

Line 55’s phrase “increase times above first” is unclear. Please name the fields explicitly to avoid ambiguity.

✏️ Proposed wording tweak
-- **disable_crc** (*Optional*, boolean): If set to `true`, invalid CRC values are ignored. This will reduce error messages but will not fix communication issues. Try increasing times above first if you see CRC errors. Defaults to `false`.
+- **disable_crc** (*Optional*, boolean): If set to `true`, invalid CRC values are ignored. This will reduce error messages but will not fix communication issues. If you see CRC errors, first try increasing `send_wait_time` and `turnaround_time`. Defaults to `false`.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **disable_crc** (*Optional*, boolean): If set to `true`, invalid CRC values are ignored. This will reduce error messages but will not fix communication issues. Try increasing times above first if you see CRC errors. Defaults to `false`.
- **disable_crc** (*Optional*, boolean): If set to `true`, invalid CRC values are ignored. This will reduce error messages but will not fix communication issues. If you see CRC errors, first try increasing `send_wait_time` and `turnaround_time`. Defaults to `false`.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/modbus.mdx` at line 55, The sentence describing
CRC troubleshooting is ambiguous: replace the phrase "Try increasing times above
first" with explicit field names and guidance (e.g., "Try increasing the request
timeout (timeout) and/or the retry count (retries) if you see CRC errors") so
readers know which settings to change; update the sentence near the disable_crc
option in src/content/docs/components/modbus.mdx to reference the exact
configuration keys used elsewhere in the docs (replace the placeholder with the
actual field names if they differ) and keep the note that disable_crc defaults
to false.


## Configuration variables

- **transport** (*Optional*, mapping): Specifies the transport method used by Zephyr MCUmgr for OTA updates. By default, Bluetooth Low Energy (`ble: true`) is enabled.
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Resolve the conflicting BLE default.

Line 25 says BLE transport is enabled by default (ble: true), but Line 42 says the default is false. Only one can be correct, and this changes whether the minimal config exposes BLE OTA automatically. Please align both places with the implementation.

Also applies to: 42-42

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/ota/zephyr_mcumgr.mdx` at line 25, The doc has
conflicting defaults for the Zephyr MCUmgr OTA transport: the "transport"
section at the `transport` mapping currently states `ble: true` while another
spot states `ble: false`; confirm the actual default in the implementation and
make both descriptions consistent by updating the `transport` mapping example
and the later default statement to match the real default (change the `ble:
true`/`ble: false` text so both occurrences of `ble` reflect the
implementation). Ensure you update the `transport` mapping example and the later
sentence that mentions the default BLE value so they match exactly.

Comment on lines +12 to +15
The `lis2dw12` sensor platform allows you to use your ST LIS2DW12 tri-axial, low-g
accelerometer ([datasheet](https://www.st.com/resource/en/datasheet/lis2dw12.pdf))
with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work.

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Add the inherited I²C device options to the config docs.

Lines 12-15 say the component requires I²C, but the configuration section never mentions that the usual I²C device settings also apply. Users with a non-default address or multiple I²C buses won't know from this page how to set address / i2c_id.

Suggested doc addition
 ### Configuration variables
 
+All [I²C Device](/components/i2c#i2c-device-configuration-variables) options are supported.
+
 The configuration is made up of several parts: The central component, acceleration sensors,
 text sensor with orientation information, and binary sensors for taps, freefall, and movement detection.

Also applies to: 31-39

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/components/sensor/lis2dw12.mdx` around lines 12 - 15, Update
the lis2dw12 component docs to state that standard I²C device options are
supported by this platform and show the relevant option names; explicitly
mention that users can set address and i2c_id (and other inherited I2C device
settings) in the lis2dw12 config and link or reference the main I²C component
docs for full option descriptions. Edit the lis2dw12 configuration section (the
lis2dw12 sensor/platform documentation) to add a short paragraph and a concise
example snippet calling out address and i2c_id usage so users with non-default
addresses or multiple I²C buses know to use those fields.

esphome[bot]
esphome bot previously requested changes Mar 13, 2026
Copy link

@esphome esphome bot left a comment

Choose a reason for hiding this comment

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

As this is a feature matched with a PR in https://github.com/esphome/esphome, please target your PR to the next branch and rebase.

@esphome esphome bot added the next label Mar 13, 2026
@esphome esphome bot dismissed their stale review March 13, 2026 23:16

Base branch has been corrected - dismissing previous review.

@esphome esphome bot dismissed their stale review March 13, 2026 23:19

Base branch has been corrected - dismissing previous review.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants