Skip to content

1.5.1

Choose a tag to compare

@ccpk1 ccpk1 released this 17 Aug 23:10
· 43 commits to main since this release

This release is all about tightening the core experience. Following the foundational hardening of 1.5.0, 1.5.1 focuses on correctness, security, and reducing friction — fixing real edge cases in state handling, notification logic, and validation, while adding quality-of-life improvements. It also brings meaningful localization gains that make ChoreOps more welcoming to a wider global community.


### 🔄 Dashboards Must Be Regenerated

To receive all of the improvements and fixes in this release, please re-generate your dashboards using the updated templates.

This is required to pick up the dashboard-side changes, including:

  • The label-grouping fix (Chores card no longer goes blank when label grouping is enabled on Lite, Essential, and KidsChores Classic dashboards).
  • The custom-interval display in the admin dashboards' recurrence cells.

Simply updating the integration alone will not apply these dashboard fixes — the templates must be regenerated.


### 🔐 Admin Button Authorization — More Robust Security on Admin Actions

⚠️ Breaking change for scripts & automations: If you currently use scripts or automations that press admin buttons (e.g. via button.press), those calls will now be denied by default. Update them to use the equivalent services (see migration below), or re-enable the legacy behavior with the new toggle in General Options.

Admin buttons have historically allowed anonymous presses (no logged-in account). This was an intentional early design choice that made it easy to call admin capabilities before dedicated services existed. Today, services are the recommended and fully supported way to build scripts and automations, and we've applied stronger, more consistent security across all admin buttons.

What changed

  • Admin buttons now require a logged-in account. Anonymous presses are denied (fail-closed).
  • Applies to: approve/disapprove chore & reward, bonus, penalty, and points adjustment.
  • Button-level checks now mirror the security already enforced on the equivalent services.

For script / automation users — what you should do

Replace admin button presses with the recommended service calls:

Instead of pressing… Use the service…
Approve / disapprove choreops.approve_chore / choreops.disapprove_chore
Apply bonus / penalty choreops.apply_bonus / choreops.apply_penalty
Adjust points choreops.manual_adjust_points

Services follow the same authorization rules but are not gated by this toggle, and are the intended path for automation. See the Services: Reference wiki page.

Want the legacy behavior back?

If you need anonymous admin button presses, you can restore the previous behavior:

  • Options Flow → General Options → "Enforce Authorization for Admin Buttons" (toggle)
  • Default: On (secure). Turn off to allow anonymous presses again.
  • ⚠️ Trade-off: Disabling it means anyone able to reach the admin buttons can trigger admin actions — the reason we made it default-on. That risk is why services remain the recommended path, even with the toggle available.

Also new

  • choreops.get_ledger service — audit point transactions: a structured, filterable dump of ledger entries including source labels and totals.
  • See the wiki pages Advanced:-Access-Control and Services:-Reference for full details.

### 🧭 Accurate Chore State — No More Stale "Overdue"

Several fixes resolve cases where chore state drifted out of sync with reality, showing incorrect overdue/missed status.

  • Per-assignee lifecycle alignment: For single-completer chores (shared/rotation), completing or approving the chore now properly clears the other assignees' stale overdue/missed states, so the global sensor and dashboard no longer report stale overdue values. (Closes #248)
  • "Due Today" guard & cleanup: Added a guard so the Due Today count no longer reports incorrectly for improper assignments. (Fix #205)
  • Standby chore corrections: Excluded non-actionable blocked claim modes from the dashboard "today" grouping. (Fix #228)

🔔 Notification Improvements — Fewer False Alerts

  • Approver alerts suppressed for primary-standby chores: No more spurious approver alerts firing for every standby user in the pool. (Fix #213)
  • Non-gamified approver template: Approvers who play without points/gamification no longer hit a missing-placeholder error on pending-chore notifications. (Fix #209; #211)
  • Notification gamification logic corrected, with regression tests added to keep it stable. (Fix #222)

📅 Badges & Scheduling Quality-of-Life

  • Badge start_date preserved on schedule edit — no more losing the cycle-window anchor when you just want to change a frequency. (Fix #237)
  • New clear-date checkboxes for badges let you empty an optional start/end date directly (HA date pickers otherwise can't be cleared). (Fix #237)
  • Chore status sensors now expose the custom interval (custom_frequency_interval / custom_frequency_unit) for all interval-based custom frequencies — not just plain custom. (Enhancement #238/#242)
  • Due-date validation errors now map to a single, clear exception key instead of surfacing confusing 500s. (Fix #218)

🌍 Localization — Big Community Effort

A heartfelt thank-you to the contributors who made this release more accessible than ever.

  • 🇩🇪 German: A huge thank-you to Zeljko-07 for manually going through the full German translation, thoroughly revising it for improvements and consistency.
  • 🇨🇳 Simplified Chinese: A special thank-you to MountComb, who spent significant time getting Simplified Chinese added and updated. This is the first East Asian language added to ChoreOps — an important milestone for our global community.
  • Plus regular syncing of all community translations via Crowdin.

Also in this release (wrap-up):

  • Dashboard frequency display updated to show the schedule interval for custom-frequency chores.
  • General translation syncs across all supported languages.

### 🙏 Thank You

1.5.1 reflects continued community feedback and contribution. Every bug report, enhancement request, and translated string makes ChoreOps better — thank you, and enjoy the fresh, more reliable ChoreOps! 🎉


What's Changed

🚨 Breaking changes

  • feat(auth): enforce fail-closed admin button auth + add get_ledger service by @ccpk1 in #249

🐛 Fixes

  • fix(choreops): Add assignment guard and cleanup for "Due Today" count by @ccpk1 in #210
  • fix(notifications): Add pending_chores_approver non-gamified template by @ccpk1 in #211
  • Suppress spurious approver alerts for primary-standby chores and add Simplified Chinese by @ccpk1 in #214
  • fix(notifications): notification gamification logic and add regression tests by @ccpk1 in #222
  • fix(services): map due-date validation errors to a single exception key by @ccpk1 in #223
  • Exclude non-actionable blocked claim modes from dashboard 'today' group by @ccpk1 in #228
  • fix: sync dashboard templates and translations for issue 236 by @ccpk1 in #239
  • fix(badges): preserve start_date on schedule edit and add clear date checkboxes by @ccpk1 in #243
  • fix(choreops): align global state with per-assignee lifecycle (Issue … by @ccpk1 in #251

✨ Enhancements

  • Bump version to 1.5.1-beta.2 and update dashboard frequency display by @ccpk1 in #217
  • feat: expose custom interval attrs on chore status sensors for all custom frequencies by @ccpk1 in #242

🌐 Localization

  • chore(l10n): sync translations from Crowdin by @github-actions[bot] in #215
  • chore(l10n): sync translations from Crowdin by @github-actions[bot] in #224
  • chore(l10n): sync translations from Crowdin by @github-actions[bot] in #229
  • chore(l10n): sync translations from Crowdin by @github-actions[bot] in #241
  • chore(l10n): sync translations from Crowdin by @github-actions[bot] in #244
  • chore(l10n): sync translations from Crowdin by @github-actions[bot] in #250

Full Changelog: 1.5.0...1.5.1