Add a custom bounding range for flexible wishes, and auto-save edits

Flexible wishes could only be bounded by one of four season presets, a
deliberate v1 scope cut. They can now take any month/day range, including
one that wraps the year end the way the jul preset does. The range stays
a search bound -- the engine still chooses the placement inside it at
propose time.

February is capped at 28 days rather than 29: the backend builds a
concrete date(year, month, day) per anchor year, so a Feb 29 bound would
raise in a non-leap year.

Per-row Save buttons are replaced by a debounced auto-save (800ms), which
is what prompted this: clicking save on each individual field was the
reported annoyance. A draft that has not actually changed never saves, so
a refetch cannot trigger a further save -- the save/refetch/save loop is
guarded explicitly and has a regression test. An invalid draft (bounding
range shorter than the wish) holds the edit locally and shows why rather
than saving.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RXMhc9nT6sNz1SL4j8dznL
This commit is contained in:
2026-09-14 18:54:43 +02:00
parent 8e14ac6576
commit f685b739f8
3 changed files with 572 additions and 90 deletions
+24
View File
@@ -210,9 +210,33 @@
.wish-editor__actions {
display: flex;
align-items: center;
gap: var(--sp-3);
}
.wish-editor__wrap-note {
flex-basis: 100%;
font-size: var(--fs-sm);
color: var(--c-text-muted);
margin: 0;
}
.wish-editor__save-status {
font-size: var(--fs-sm);
}
.wish-editor__save-status--saving {
color: var(--c-text-muted);
}
.wish-editor__save-status--saved {
color: var(--c-success);
}
.wish-editor__save-status--error {
color: var(--c-danger);
}
/* Plan results */
.plan-results__preview-banner {
background-color: var(--c-accent-weak);