From 174c2e3684114458640270612212898f3ad777e3 Mon Sep 17 00:00:00 2001 From: tempus2016 Date: Thu, 13 Aug 2026 11:57:03 +0000 Subject: [PATCH] chore(release): v5.1.1 Bump the manifest to 5.1.1 and add the changelog entry covering the sibling-swap fixes (#781, #783, #785, #787), the next-badge progress line on the child card (#780), and the CI/HA-floor work. --- README.md | 21 +++++++++++++++++++++ custom_components/taskmate/manifest.json | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5d82e7d..5d879e1 100755 --- a/README.md +++ b/README.md @@ -1823,6 +1823,27 @@ Beyond the sensors above, TaskMate also exposes: ## Changelog +### v5.1.1 + +A fix release for sibling chore swaps — the whole feature was unusable, and three of the four bugs below were invisible rather than noisy. Plus one small kid-facing addition: the child card now shows how close the next badge is. No configuration changes — upgrade is drop-in. + +**New — cards** +- **Progress toward the next badge on the child card** — under the earned-badge strip there is now a compact **Next up** line: tier-coloured icon, badge name, a thin bar and a `845 / 1000` count for the closest unearned badge. The card only ever showed badges already won, so a child working toward *10 Perfect Weeks* got no feedback until it popped; that progress existed only in the Badges card, which children rarely open. Tapping the line opens the panel's badges section, same as the earned strip. It hides itself when there is nothing left to earn or every remaining badge is still at 0%, and switches off with `show_next_badge: false`. Shown on all five designs. ([#788](https://github.com/tempus2016/taskmate/pull/788), closes [#780](https://github.com/tempus2016/taskmate/issues/780)) +- **The Badges card's locked-tile progress bars now draw** — found while building the above. Those bars read a `closest_criterion` field that nothing ever emitted, so they had never appeared on real data. The badges sensor now publishes it, and the bars work (verified on a live instance: 0 bars before, 9 after). ([#788](https://github.com/tempus2016/taskmate/pull/788)) + +**Fixes** +- **An approved sibling swap can now actually be completed** — the swapped-to child saw the chore appear on their card, then tapping it did nothing at all: no completion, no points, no pending approval, and the chore reappeared within 30 seconds. Approval wrote only the cached assignee field, while every eligibility gate resolves the day's assignee through pure rotation date maths, so the completion service rejected the tap as "not assigned to you today" — silently, at debug level. Approval now stamps a dated override that the resolver honours, which repairs completion, the per-chore button, the to-do list, streak and perfect-day accounting, calendar publishing, and the mid-day availability re-check that used to revert an approved swap. Skipping a chore or manually starting it clears the swap, since both are deliberate parent moves. **Broken since v4.0.0, when sibling swaps were introduced.** ([#782](https://github.com/tempus2016/taskmate/pull/782), closes [#781](https://github.com/tempus2016/taskmate/issues/781)) +- **A deleted chore or child no longer leaves a stuck swap request in the approval queue** — removing either cascaded to completions, transactions, task groups and much else, but never to swap requests, so a pending request outlived what it referred to. The panel cannot resolve a name that is gone, so the parent was left with a permanent **"? wants to swap ?"** row that only rejecting could clear. Both ends of a request are now cascaded, and a chore's approved swap is cleared if it pointed at the deleted child. Existing installs are swept clean on upgrade. ([#786](https://github.com/tempus2016/taskmate/pull/786), closes [#785](https://github.com/tempus2016/taskmate/issues/785)) +- **Deleting a child no longer hides their rotation chores from everyone else** — the child was removed from the chore's pool but the chore kept pointing at them as today's assignee, and since a deleted id matches nobody the chore vanished from every remaining child's card until midnight recomputed it. Confusingly the completion service and to-do list still accepted the survivor — only the card disagreed. Affected chores are now repointed at today's live pool immediately, and the pointer clears when the pool empties. ([#789](https://github.com/tempus2016/taskmate/pull/789), closes [#787](https://github.com/tempus2016/taskmate/issues/787)) +- **Settled swap requests are no longer kept forever** — approving a swap flipped the record's status and left it in storage. Nothing reads a request once it stops being pending, so those were write-only rows that accumulated for the life of the install. Approval now consumes the request, exactly as rejection always did, and existing stores are swept on load. Nothing is lost: the approval is still observable through the `taskmate_swap_approved` event and the chore's own dated override. ([#784](https://github.com/tempus2016/taskmate/pull/784), closes [#783](https://github.com/tempus2016/taskmate/issues/783)) +- **Badge progress for "any of these" badges** — the sensor reported the *worst* criterion for every badge, but a badge with an OR combinator is awarded on the best one, so such a badge could sit below 100% while already earned. It now takes the minimum for AND badges and the maximum for OR. ([#788](https://github.com/tempus2016/taskmate/pull/788)) + +**Internal** +- The documented minimum Home Assistant version was wrong: `async_register_static_paths` puts the real floor at **2024.7.0**, not the 2024.1.0 previously claimed. ([#776](https://github.com/tempus2016/taskmate/pull/776)) +- CI now tests **both ends** of the supported range — Python 3.12 on HA 2024.7.0 and Python 3.14 on current — so a change that breaks the floor is caught before release. ([#775](https://github.com/tempus2016/taskmate/pull/775), [#777](https://github.com/tempus2016/taskmate/pull/777), [#778](https://github.com/tempus2016/taskmate/pull/778)) +- `ruff format` is enforced in CI, with the one-off reformat commit added to `.git-blame-ignore-revs`. ([#774](https://github.com/tempus2016/taskmate/pull/774)) +- Added release guards that fail loudly rather than silently shipping a broken release: manifest-version-matches-tag, and a check that `taskmate.zip` is attached. Plus data-file checks, dependency review and a dev container. ([#772](https://github.com/tempus2016/taskmate/pull/772)) + ### v5.1.0 Two features aimed at the two things you do most: **give a chore a real photograph**, and **adjust a child's points without leaving the panel**. Plus a correlation id for anyone wiring TaskMate into something else. No configuration changes — upgrade is drop-in. diff --git a/custom_components/taskmate/manifest.json b/custom_components/taskmate/manifest.json index 0485e22..42a94c2 100644 --- a/custom_components/taskmate/manifest.json +++ b/custom_components/taskmate/manifest.json @@ -17,5 +17,5 @@ "iot_class": "calculated", "issue_tracker": "https://github.com/tempus2016/taskmate/issues", "requirements": [], - "version": "5.1.0" + "version": "5.1.1" }