Plan-screen deferred hardening #192

1 Commits
Author SHA1 Message Date
dev_agentandClaude Opus 5.5 c65e781c98 Harden Plan swaps: prune settled swaps, close the rollback gap, strict syncedAt, rechoose on dinner_already_planned
CI / ci (push) Successful in 8m4s
CI / ci (pull_request) Successful in 8m8s
- keepWeekMutations: once none of a week's swaps is pending only the latest
  is kept; a failed latest swap stays across showing other weeks until the
  week's board leaves it behind, so coming back still shows it.
- useSwapDay: a failed PUT rolls its day back only if no server plan read
  has landed since its optimistic write (query update generation), even a
  read whose day matches the optimistic one.
- syncedAt: calendar_synced_at must be a full RFC 3339 instant with an
  offset before it is parsed.
- A swap refused with 409 dinner_already_planned reads the plan again; the
  Draft board offers "Choose another dinner" instead of resending it.

Task: d21e4a83-9ae4-4944-9621-a10db9fad0b9

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 00:59:40 -04:00