Repository navigation
feat(chores): a schedule wizard, and "any day" beyond a week - #364
Merged
Merged
Conversation
The board's Add dialog keeps its picker of chips and gains a wizard beside it (Picker | Wizard; each display remembers which it last used). The wizard steps through it: how often (certain days, once in a while any day, every few days, a date each month, again a while after it's done, just once), the details, and for timings on days whether a chore not done that day goes at day's end or stays until done; then the chores, and a one-line summary before Add. Back keeps the answers. "Once a week, any day" (#362) becomes once in a period, any day: duration `any-day` with its period in `interval`: a week, two weeks, a month, three or six months (calendar quarters and halves), or a year. Each period's card is due on its last day, counts toward the daily bonus only then, and an undone period is one miss; the next period starts fresh. `weekly` is still accepted as any-day every week, and migration 38 turns existing weekly rows into any-day 1w. The schedule dialog offers the periods too. The board's week calendar draws an any-day chore by its period, and uses which schedules have a card up so a monthly chore done earlier in the month isn't shown as waiting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
adamecker
pushed a commit
to adamecker/HomeGlow
that referenced
this pull request
Oct 31, 2026
…) into test/all-combined Upstream's any-day chores migration renumbered 38 -> 44: this branch already uses 38 for choreExpiry (renumbered upstream 32), and 43 is the highest registered id. Its test updated to match (43 -> 44). Google Tasks sync (schema 28/34) and custom ChoreIconPicker preserved.
Collaborator
|
Read through any-day after merge and reproduced these on a fresh server, with the nightly run triggered through Most serious:
Also:
Not run end to end:
|
Owner
Author
|
Addressed in #369 |
jherforth
added a commit
that referenced
this pull request
Nov 1, 2026
- A card from someone's own schedule keeps its person overnight, clams or not. - Moved off any-day, or deleted, its open card goes instead of lingering as a one-time chore due every day (holding back the bonus, logging misses). - A repeating schedule made one-time counts only completions logged after the change (one_time_after_history_id, migration 40), so it isn't cleared undone. - Copy keeps an any-day group's period. - Two-week periods count from the household's date the schedule was made. - The week calendar handles a week that holds two periods, and plans nothing for a period already done. - The wizard takes whole numbers only. - Due-time sounds skip a one-time chore due on a later day. - A card made on its period's last day doesn't count that day. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Scheduling a chore on the By person board meant reading a menu of chips (Every day, Weekdays, Mon · Wed · Fri…) and knowing which one fit. Jason asked for a wizard that steps through it, beside the picker rather than replacing it. He also asked that the "any day" option from #362 go beyond a week.
What changes
Picker | Wizard in the Add dialog, as in the concept. The picker is unchanged. Each display remembers which mode was used last (picker at first). The wizard has five steps (four where step 3 doesn't apply):
How often?
The details:
It shows the timing so far ("So far: Once a month, any day").
If it isn't done that day… (only for timings that fall on days): it goes away at the end of the day, or it stays until it's done. The picker never asked this; it always made day-of schedules.
The chores: the existing tick list, with New chore.
Check and add: "Emma: 🌀 Change furnace filter. Once a month, any day.", plus a note if it stays until done, or if some chores move from another schedule.
Back keeps the answers given. A step counter shows where you are.
Any day, beyond a week. #362's
weeklybecomesany-day, with its period ininterval:1w2w1m3m6m1yThe rules are the same for every period:
weeklyis still accepted (asany-dayevery1w), and migration 38 converts existing weekly rows. The schedule dialog's Duration offers Once in a while (any day) with a period field.Board calendar. An any-day chore is drawn by its period. The calendar now knows which schedules have a card up, so a monthly chore done on the 3rd doesn't show as "waiting" when you look at the 20th; that week's history alone couldn't tell.
Code
client/src/components/ScheduleWizard.jsx: the steps and the timing they build (wizardTiming). The board keeps the dialog, the chores step, the review and saving (keepbecomes the schedule's duration).server/services/anyDayChores.js(renamed fromweeklyChores.js):periodOf(date, period, anchor)plus validation.client/src/utils/choreScheduleGroups.jshas the same period logic (anyDayPeriodOf) for the calendar.schema38-anyDayChores.Testing
npm test700/700.anyDayChoresRules.test.js: week, fortnight, month (including leap February), quarter, half and year boundaries; theweeklyalias.anyDayChores.test.js, on a real server:weeklyis accepted and bad periods are refused;weeklyrow.vitest883/883. Period logic matches the server's; any-day timings group and order correctly, write the right fields, and can be moved off. Calendar cases: done, waiting, due today, no open card, missed, not done, planned, before creation.check:i18nandbuildare clean.any-day/1mwith its card due at month end, in a "Once a month, any day" group;0 0 * * 1,4/until-completed;🤖 Generated with Claude Code