Skip to content

Chore Swaps

tempus2016 edited this page Jun 17, 2026 · 2 revisions

Chore swaps let a child ask to take over today's turn of a rotation chore from a sibling. The request is pending until a parent approves it, at which point the chore is reassigned to the requester for the day.


When a Swap Is Possible

Swaps only apply to rotation chores — those using alternating, random, or balanced assignment modes, where exactly one child holds today's turn.

A request is rejected outright if:

  • The chore is in everyone or unassigned mode (there is no single turn to take over)
  • The chore is already assigned to the requesting child today

Note: first_come chores are not swappable — they are an open race, so there is no fixed turn to hand over.


Requesting a Swap

A child requests a swap with the taskmate.request_swap service, or from the chore row in the Admin Panel (Request swap button).

service: taskmate.request_swap
data:
  chore_id: b3f9a12c
  requester_id: a8c8376a
Field Required Description
chore_id Yes The rotation chore to take over
requester_id Yes The child who wants today's turn

The service is linked-child gated — a child user can only request on their own behalf. The request is stored with a pending status, recording the requester, the child who currently holds the turn (from_child_id), and a timestamp.


Parent Approval

Pending swap requests appear to parents in the Admin Panel (with a count badge). For each, the parent can approve or reject:

Action What happens
Approve Today's turn is reassigned to the requester — the chore's current assignee becomes the requesting child for the day. The request is marked approved.
Reject The pending request is removed. The rotation is unchanged.

On approval, TaskMate fires a taskmate_swap_approved event carrying chore_id, requester_id, and from_child_id.


Scope of a Swap

A swap changes only today's assignment of the chore. It does not alter the underlying rotation order or anchor — the next scheduled day follows the normal rotation algorithm as if the swap had not happened.


Related

Clone this wiki locally