Skip to content

v0.4.5.1

Choose a tag to compare

@3dg1luk43 3dg1luk43 released this 11 Jun 10:29
8460b86

0.4.5.1 - 2026-06-11

🐛 Bug Fixes

  • Recorded Power Trace Undersampled for Wet Appliances (#270): The previous 30s global sampling-interval default discarded the rapid 0↔150W motor/heater oscillation of washing machines, washer-dryers, and dishwashers, so WashData's stored power trace looked mostly flat with a few isolated spikes while the Home Assistant sensor showed full activity, degrading cycle and program detection. New setups for these three device types now default to a 2s sampling interval, and the advanced-settings tooltip documents the per-device default. Existing devices keep their saved interval so lower Sampling Interval in advanced settings to benefit. Original investigation and fix by @rysiuwroc (PR #271).

  • Translation Placeholder Validation Errors on Startup (#269, #275): After startup, Home Assistant logged "Validation of translation placeholders for localized (<lang>) string … notify_pre_complete_message failed" for the Live Update Message Format description (reported for German and Italian, but present in every language). The English source gained a third {program} placeholder and was reworded to describe the recurring live progress updates, but the localized descriptions still carried only {device} and {minutes} with the old "sent before completion" wording, so their placeholder set no longer matched the source and the loader rejected them. The description has been retranslated across all 60 languages so each one again matches the English placeholder set ({device}, {minutes}, {program}) and reflects the current wording.

  • New Cycle Now Detected While Still Showing "Finished" (#267): Starting a new run while the device was still in the Finished (or Clean) display window could leave WashData pinned in that state until the progress-reset window expired (~30 min), only then dropping to Off and detecting the new cycle. The cause was the manual-stop lockout that arms after a user/external cycle-end stop: it only cleared once power dropped below the start threshold, so a machine that kept drawing power (a back-to-back load, or standby/door-lock draw) was never released. The lockout now also releases once power stays at or above the start threshold for longer than any plausible spin-down, so a genuinely new load is detected immediately and resets everything as a fresh cycle. The brief post-stop spin-down is still ignored, exactly as before. The options/UI also leaves the Finished overlay and cancels the reset timer the moment a new cycle starts, so the state and the "still inside" reminder no longer lag behind.

🛠 Internal / Developer Experience

  • PR Validation: Duplicate Comment Storm Fixed (PR #271): The issue-link validator posted its "automatically closed" notice ten times on a single PR. The Validate Pull Request workflow re-runs on every pull_request_target edit/synchronize event (including bots such as CodeRabbit editing the PR description), and the issue-link job commented and closed unconditionally with no idempotency check, so each re-trigger added another identical comment, and overlapping runs raced one another. The workflow now serialises per PR through a concurrency group (cancelling superseded runs), reuses a single bot comment instead of posting duplicates, and skips PRs that are already closed. The changed-file and comment lookups are now paginated so a PR with many files or comments is classified and de-duplicated correctly rather than only seeing the first page.

  • Contribution Gating: Graduated Instead of Immediate Close: Previously a PR with no linked accepted issue was closed the instant it opened. The gate is now staged so contributors get a chance to follow the process: a PR with no linked issue is labelled needs accepted issue, told what to do, and given a 3-day grace before the scheduled job closes it; a PR that references an issue which does not yet carry the accepted label is parked under an awaiting maintainer label and is never auto-closed, with the maintainer pinged once in that issue to review it; a PR linked to an accepted issue passes and any earlier warning label/comment is cleared. None of this merges anything: the automation only comments, labels, and closes, so the decision to accept and merge stays entirely manual.

  • Localization PRs Exempt by Asset, Not Just Directory: The accepted-issue requirement is waived for localization-only PRs. A UI-text change necessarily edits strings.json (the source of truth) and regenerates every translations/*.json file, so the exemption now recognises strings.json as a localization asset alongside the translations/ directory, instead of treating a one-line UI string fix as a code PR because of the retranslation churn it drags along. PRs that also touch Python or other code still require an accepted issue.

  • Stale-PR Closer Generalised and Anchored to Label Time: The scheduled Close Incomplete PRs workflow was renamed Close Stale PRs and now closes both needs description (5-day grace) and needs accepted issue (3-day grace) PRs from a single rule list. Each grace period is measured from when its label was actually applied (read from the PR's label events) rather than from PR creation, so a PR labelled long after it was opened gets the full grace the warning promises instead of being closed early. The workflow was also granted the issues: write permission it needs to comment, alongside its existing pull-requests: write. New repository labels needs accepted issue and awaiting maintainer back this flow.