1.7.0
What's changed
Changes since 1.6.10
π New features
- #2289 - Accept an explicit friendly_name in devices/create (@bdraco)
- #2312 - Resolve the logger output interface onto the Device (@bdraco)
- #2340 - Upload imported bundles over HTTP instead of the WebSocket (@bdraco)
- frontend#1409 - Text change: wirelessly => over the network (@breti)
- frontend#1412 - Add guided wiring presets to the pin field (@bdraco)
- frontend#1419 - Lock the GPIO select on board-preconfigured pins (@bdraco)
- frontend#1445 - Swap the dashboard kebab's native title for wa-tooltip (@bdraco)
- frontend#1446 - Route provably mismatched serial log ports straight to network logs (@bdraco)
- frontend#1454 - Unify the action-list add buttons on the dashed quiet style (@bdraco)
- frontend#1447 - Move Add action below the action list and confirm automation deletes (@bdraco)
- frontend#1488 - Clarify that the USB flasher hand-off never uploads firmware (@bdraco)
- frontend#1482 - Show a busy affordance while a section switch waits on the flush (@bdraco)
- frontend#1493 - Upload imported bundles over HTTP instead of the WebSocket (@bdraco)
- frontend#1500 - Make the section switch synchronous (@bdraco)
π Bug fixes
- #2293 - Drop ambiguous MDX bare-stem aliases to stop title bleed (@bdraco)
- #2296 - Lock fixed-hardware featured presets across board manifests (@bdraco)
- #2297 - Default the ESK-1 AHT20 readings on (@bdraco)
- #2301 - Auto-discover cross-component gates from the live schema (@bdraco)
- #2305 - Restore web_server_base_id to the catalog (@bdraco)
- #2317 - Retire the schema's hand variant enum and fold variant filter spellings (@bdraco)
- #2318 - Fold upstream variant spellings through the shared normalizer (@bdraco)
- #2320 - Give oversized remote-build bundles an actionable error and raise the cap (@bdraco)
- #2324 - Raise the import-bundle cap to match the remote-build bundle cap (@bdraco)
- #2330 - Ack a submit_job before the receiver's write and extract hop (@bdraco)
- #2335 - Run the post-ack extract off the receive loop (@bdraco)
- #2342 - Reject a path-escaping submit_job header before the ack (@bdraco)
- #2351 - Keep an automation editable when an action is uncatalogued (@bdraco)
- frontend#1416 - Freeze collision checks while the create is in flight (@bdraco)
- frontend#1415 - Resync the hostname input after a one-step clear (@bdraco)
- frontend#1411 - Fix the device name field hinting a hostname, not a friendly name (@bdraco)
- frontend#1420 - Ride out native-USB re-enumeration disconnects on the web connect cards (@bdraco)
- frontend#1425 - Say GND consistently and drop the reed board wording (@bdraco)
- frontend#1424 - Name featured section headers like the recommended cards (@bdraco)
- frontend#1423 - Keep the featured entry's presentation in the editor section header (@bdraco)
- frontend#1422 - Honor board-locked presets across the form surfaces (@bdraco)
- frontend#1426 - Auto-reconnect the web logs terminal after a re-enumeration (@bdraco)
- frontend#1428 - Correction of the spelling/capitalization of keyboard shortcuts (@breti)
- frontend#1440 - Route the flash receiver's boot logs through the web logs dialog (@bdraco)
- frontend#1442 - Offer network logs when the post-flash serial console is a dead end (@bdraco)
- frontend#1444 - Swap web.esphome.io native title tooltips for wa-tooltip (@bdraco)
- frontend#1437 - Re-bind the logs/install method picker to the live device object (@bdraco)
- frontend#1439 - Keep the collision check frozen through the create dialog's close (@bdraco)
- frontend#1448 - Gate the reconnect picker on the console mismatch and match esptool's JTAG reset check (@bdraco)
- frontend#1468 - Await the section-switch flush before swapping the selection (@bdraco)
- frontend#1474 - Hold flushPending until the queued re-run settles (@bdraco)
- frontend#1467 - Revert optimistic label assignments when set_labels fails (@bdraco)
- frontend#1455 - Settle a racing upsert before the delete computes its diff (@bdraco)
- frontend#1491 - Re-base a superseded delete onto the live buffer (@bdraco)
- frontend#1485 - Carry the delete dispatch's basis so a newer draft survives it (@bdraco)
- frontend#1489 - Identity-guard dirty-change like the rest of the lifecycle trio (@bdraco)
- frontend#1484 - Ride the section-unmount announcement on the mount-time parent (@bdraco)
- frontend#1475 - Deliver the post-delete yaml-updated through the mount-time parent (@bdraco)
- frontend#1477 - Re-resolve the cursor target's line against the flush-settled buffer (@bdraco)
- frontend#1496 - Carry the emitter's configuration on yaml-draft and identity-guard it (@bdraco)
- frontend#1511 - Show pin panels for a scalar ${var} pin value (@bdraco)
- frontend#1513 - Render an uncatalogued automation action read-only in place (@bdraco)
- frontend#1512 - Hide the advanced-settings toggle when every advanced field is hidden (@bdraco)
- frontend#1510 - Collect LIST_SECTIONS item ids as reference candidates (@bdraco)
- frontend#1506 - Await the section flush before the leave dialog (@bdraco)
- frontend#1497 - Anchor-dispatch auto-apply drafts and carry their basis (@bdraco)
π Refactor
- #2314 - Retire the Esp32Variant enum in favor of the live variant snapshot (@bdraco)
- #2325 - Free the assembler's working buffer once finalise memoises the result (@bdraco)
- #2338 - Split controllers/remote_build/submit_job.py into a package (@bdraco)
- frontend#1418 - Group GPIO pin logic into dedicated pin directories (@bdraco)
- frontend#1432 - Split the re-enumeration helpers into serial-reacquire.ts (@bdraco)
- frontend#1443 - Type the frozen collision set's constructor (@bdraco)
- frontend#1456 - Type the section-editor contract the device page relies on (@bdraco)
- frontend#1449 - Unify the three automation-section editors on a shared base class (@bdraco)
- frontend#1473 - Extract a shared mock preamble for the device-page suites (@bdraco)
- frontend#1469 - Restructure AutoApplyController's flags into explicit apply and delete modes (@bdraco)
- frontend#1459 - Extract a shared harness for the automation-editor suites (@bdraco)
- frontend#1460 - Type the section-editor event contract (@bdraco)
- frontend#1494 - Replace flushPending's 20ms poll with a settled promise on ApplyPhase (@bdraco)
- frontend#1507 - Replace source-text assertions with behavioral coverage (@bdraco)
- frontend#1499 - Collapse the bundle flow's five guarded draft publishes into one closure (@bdraco)
π Documentation
- #2303 - Pin the recurring docstring-review failure shape in CLAUDE.md (@bdraco)
- #2341 - Trim submit_job package docstrings to contracts (@bdraco)
- #2344 - Document the early-ack submit_job_ack wire contract (@bdraco)
- frontend#1427 - Add the ESPHome Web development guide (@bdraco)
- frontend#1435 - Name the activity window's write side and mirror the test file (@bdraco)
π§Ή Maintenance
- #2302 - Drop the stale mqtt self-gate pin; guard gate discovery with floors (@bdraco)
- #2306 - Cover the gating-floor failure branches and discovery boundary cases (@bdraco)
- #2311 - Pin the deferred catalog gate expectations after the resync (@bdraco)
- #2323 - Give the bundle-timeout test margin over child interpreter startup (@bdraco)
- #2345 - Add an e2e for the accepted-ack then failed-terminal seam (@bdraco)
- frontend#1141 - Use official ESPHome monochrome logomarks in header and nav (@elcaptain)
- frontend#1466 - Remove board-info's unreachable add dialogs (@bdraco)
- frontend#1462 - Enable the unused-code checks and clear the existing offenders (@bdraco)
- frontend#1495 - Retire the poll vocabulary and note the settled-branch-only hop (@bdraco)
- frontend#1508 - Resolve the FIXME'd floating-promise sites with reviewed handling (@bdraco)
- frontend#1502 - Adopt ESLint with type-aware promise rules (@bdraco)
β¬οΈ Dependencies / CI
2 changes
- #2287 - deps: bump ruff from 0.15.21 to 0.15.22 (@dependabot[bot])
- #2288 - deps: bump pre-commit from 4.6.0 to 4.6.1 (@dependabot[bot])