Skip to content

Advanced: Chores

ccpk1 edited this page Jun 17, 2026 · 6 revisions

Prerequisites: Familiarity with Chore Configuration Guide

Note

This guide is for complex household workflows: per-assignee schedules, multi-times-per-day chores, strict claim windows, and turn-based rotation.


Who This Is For

Use this page if you need one or more of these:

  • Different schedules per assignee for the same chore
  • More than one completion window per day
  • Recurrence based on completion timing
  • Strict “not yet claimable” windows
  • Rotation with fairness and optional steal behavior

If you just need standard daily/weekly chores, use Chore Configuration Guide.


How To Read This Page

Advanced configuration is easiest when done in this order:

  1. Build the advanced schedule
  2. Configure claim timing and reminders
  3. Configure approval boundary behavior
  4. Apply rotation and overdue strategy

1) Advanced Scheduling

Daily Multi (multiple completions per day)

Use Daily (Multiple times per day) when one Chore should appear at multiple time slots.

  • Time format: HH:MM|HH:MM|HH:MM
  • Each slot is a separate completion opportunity
  • Use realistic slot counts to avoid overload

Important

Daily Multi has compatibility validation. If a combination is not allowed, the flow blocks save with a clear error.

Where Daily Multi times are entered

  • Shared modes or single-assignee independent: one shared daily_multi_times field in helper step
  • Independent with multiple assignees: per-assignee daily times fields in the helper step

Custom interval recurrence

Use Custom for interval-based recurrence from schedule boundaries.

Examples:

  • Every 3 days
  • Every 2 weeks
  • Every 6 hours (short-term workflows)

Custom from completion

Use Custom from completion when next due time should be calculated from when the Chore was actually completed.

Best for maintenance-style chores where interval-after-completion matters.

This is different from approval reset timing. Treat them as two independent controls:

  • Approval reset type (including Upon completion) controls when approved returns to pending.
  • Frequency (Custom interval vs Custom from completion) controls what timestamp recurrence uses for the next due date.

Clear behavior examples:

  • Upon completion + Custom interval: resets to pending immediately, then next due date still follows normal due-date-based recurrence scheduling.
  • Upon completion + Custom from completion: resets to pending immediately, and next due date is anchored to completion timestamp.

You can use either behavior alone, or combine both when needed.

Tip

Hour-based recurrence is powerful but can create alert fatigue. Keep it intentional.


2) Per-assignee helper (Independent + multiple assignees)

When completion criteria is Independent and multiple assignees are assigned, the flow can open per-assignee helper fields.

Per-assignee fields may include:

  • Applicable days per assignee
  • Daily Multi times per assignee
  • Due date per assignee
  • Clear due date per assignee

Use this to run one shared Chore definition with individualized schedules.

Common use cases

  • Split-week routines (assignee A early week, assignee B late week)
  • Different school-night/weekend schedules
  • Different Daily Multi slot times by assignee age/routine

3) Claim Timing, Locking, and Reminders

Due window offset

Due Window Offset controls when a Chore transitions into the due window before due date.

Format accepts duration strings like:

  • 30 (minutes)
  • 1d 6h 30m
  • 0 (disable)

If disabled (0), the chore stays in normal pending-style availability until other timing rules apply. Due window is an optional refinement layer, not a requirement.

Lock claim until due window opens

Lock Claim Until Window Opens prevents assignees from claiming before the due window starts.

When this lock is active, an assignee can see Waiting (Due Window Not Open).

4) Approval Cycle Controls

Think in three lanes:

  • Trigger lane: Approval Reset Type
  • Pending-claim lane: Pending Claim Action
  • Overdue lane: Overdue Handling

Approval reset type

Controls when the approval boundary fires:

  • At Midnight Once per day
  • At Midnight Multiple times per day
  • At due date (single or multi)
  • Upon completion
  • Manual reset only

Note

Midnight approval reset types (at_midnight_once, at_midnight_multi) are due-boundary gated. At midnight, a chore is eligible for reset only when:

  • the chore has no due date, or
  • the current time is at/after the due boundary.

If the due time is later that same day, a just-after-midnight scan can skip the reset and keep the chore approved.

Tip

No due date means midnight reset remains eligible for at_midnight_* behavior.

In plain terms: after a chore is approved, this setting controls when it becomes pending/claimable again.

Important: Upon completion changes reset timing only. It does not change recurrence anchor math by itself.

Pending claim action

Controls what happens to unapproved claims at the boundary:

  • hold_pending
  • clear_pending
  • auto_approve_pending

Auto approve

Auto Approve can reduce approver overhead for trusted chores.

Use carefully when accountability or review is still important.


5) Visibility and Notification Controls

These controls are part of advanced tuning and are easy to miss if you only use defaults.

Chore notifications

Choose which workflow moments generate notifications. Available notification moments include:

  • claim
  • approval
  • disapproval
  • overdue
  • due-window start
  • due reminder

Use this to reduce noise while preserving high-value alerts.

Due reminder offset

Controls when due reminder notifications fire before due date.

  • Uses duration format like 30m, 1h 20m, 1d 2h
  • Works with notification selections for due reminders

Show on calendar

Controls whether the Chore appears in calendar-based views.

  • Enable for schedule-centric household planning
  • Disable for low-signal chores you do not want in calendar surfaces

Labels

Labels support organization, grouping, and dashboard filtering.

Use labels when they improve sorting or filtering. Keep label taxonomy simple and consistent.


6) Rotation and Overdue Strategies

Rotation modes

Rotation Simple

  • Turn-holder only before overdue unlocks
  • Strict order advancement

Rotation Smart

  • Turn-holder only before overdue unlocks
  • Fairness-weighted advancement

Fairness selection uses completion history and recency so turns do not stay unbalanced.

Primary & Standby

  • First assigned user is permanent primary
  • Other assigned users resolve to Standby state with lock icon
  • Claim gating by standby_claim_mode: anytime, on_overdue (after due date), manual_only
  • Primary pause → standby automatically activates
  • When multiple standbys and primary is paused, the turn rotates among standbys in round-robin order (simple rotation) on each completion
  • Primary unpause → turn snaps back to primary immediately
  • open_rotation_cycle lifts standby lock for one cycle
  • allow_steal is not compatible

Rotation lock states

Assignees can encounter these valid blocked states:

  • Standby (Primary & Standby only)
  • Not My Turn (Rotation Simple/Smart)
  • Missed (Locked)

Allow Steal (rotation-only overdue strategy)

Allow Steal Until Approval Reset (Rotation Only) changes claim behavior after due time.

  • Before due: only turn-holder claims
  • After due: other assigned assignees can claim (steal window)
  • If nobody completes before boundary: overdue policy resolves and turn advances

Warning

Allow Steal is valid only when all are true:

  • Completion criteria is rotation_simple or rotation_smart
  • Approval reset type is once-per-day style
  • Due date is set

7) Pausing Chore Processing

ChoreOps supports temporarily pausing chore processing for a user. While paused:

  • All chores show Paused status instead of their normal FSM state
  • No overdue/missed penalties accumulate
  • Rotation advances past the paused user
  • Existing claims survive and can still be approved
  • The can_claim action gate returns false

Pause scopes

Scope Level Description Status
User pause User All chores paused for a specific user. The user's chores_paused flag controls this. Implemented
Global chore pause Chore A single chore paused for all assignees. Architectural hook only. 🔮 Future
Chore×User pause Chore+User A single chore paused for one specific user. Architectural hook only. 🔮 Future

Automatic unpause

If a return date (paused_until) is set, the system auto-clears the pause flag at the first midnight after that date passes. Without a return date, the pause is indefinite and must be manually cleared.

Rotation behavior when paused

  • The paused user's turn is skipped during rotation advancement
  • If all assignees are paused, rotation freezes at the current position (no infinite loop)
  • For primary-standby: when the primary unpauses, the turn snaps back to them immediately
  • For simple/smart rotation: on unpause, the user re-enters at the back of the rotation line

What the admin should do before unpausing

  1. Push Chores Forward — move recurring chore due dates past the return date so the user doesn't immediately see overdue chores
  2. Review rotation position — the user may have lost their turn; use set_rotation_turn if needed
  3. Clear persistent notifications — stale overdue/missed notifications from before the pause remain visible

Tip

The unpause service (choreops.pause_user_chores with paused: false) supports an optional unpause_action parameter that can shift past-due chores current as part of unpausing — see Services Reference for details.

Gamification impact during pause

  • Streaks: Always break on the first midnight with no completion — no chores were done on those days
  • Cumulative badges: May demote if the pause is long enough to miss a maintenance threshold
  • Time-limited challenges: The clock keeps ticking — deadlines do not pause
  • Points: No penalties accumulate during the pause (neither deductions nor missed-chore penalties)

See also

  • Services:-Reference.mdchoreops.pause_user_chores service documentation
  • Configuration:-Users.md — Chore pause field in user configuration

High-Value Patterns

Pattern A: Split-week independent household

  • Completion: independent
  • Per-assignee applicable days
  • Optional per-assignee due dates

Pattern B: Meal-based recurring chore

  • Frequency: Daily Multi
  • Times: morning/lunch/evening slots
  • Lower points per slot for balance

Pattern C: Fair sibling turn-taking

  • Completion: rotation simple or rotation smart
  • Due window lock enabled
  • Optional allow-steal for late-window flexibility

Pattern D: Low-noise, high-signal notifications

  • Configure chore notifications for only overdue + due reminder + disapproval
  • Keep claim/approval notifications off for routine chores
  • Leave calendar visibility on only for chores that are schedule-critical

Troubleshooting

Per-assignee helper did not appear

  • Confirm completion criteria is independent
  • Confirm multiple assignees are assigned

Daily Multi helper did not appear

  • Confirm frequency is Daily Multi
  • Confirm required schedule fields are set

Save blocked by compatibility error

  • Read validation message and adjust the incompatible pair
  • Common source: Daily Multi + incompatible approval-reset selection
  • Common source: Allow Steal + non-rotation completion mode

Assignee cannot claim

  • Check state/lock reason on the chore status entity
  • Common lock reasons: waiting, not_my_turn, missed
  • Verify due window lock and rotation settings for that chore

Clone this wiki locally