Milestone v1.0: FamilySync MVP #1

Merged
luckberg merged 376 commits from gsd/v1.0-milestone into main 2026-06-10 17:39:19 -04:00
Showing only changes of commit 5724fe85d2 - Show all commits
+12 -2
View File
@@ -352,8 +352,18 @@ export function EventForm() {
if (recurrence !== 'none') {
if (recurrenceBound === 'count' && recurrenceCount < 1) {
newErrors.recurrenceBound = 'Must be at least 1 occurrence'
} else if (recurrenceBound === 'until' && recurrenceUntil) {
if (recurrenceUntil < startDate) {
} else if (recurrenceBound === 'until') {
// WR-02: a blank end date with bound='until' must be a validation error.
// Previously it passed validation and the payload spread dropped
// recurrenceUntil, silently creating an UNBOUNDED series — the opposite
// of the user's stated "Ends: On date" intent.
if (!recurrenceUntil) {
newErrors.recurrenceBound = 'Choose an end date'
} else if (startDate && recurrenceUntil < startDate) {
// WR-07: only compare when startDate is non-empty. Both values are
// zero-padded ISO DATE strings here, so lexicographic compare is valid;
// guarding on a non-empty startDate avoids `recurrenceUntil < ''` (always
// false) silently skipping the bound-before-start guard.
newErrors.recurrenceBound = 'End date must be after the event starts'
}
}