Release v26.04.29.3 — Event-store data integrity + EventSlideOver redesign #47
Reference in New Issue
Block a user
Delete Branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Highlights
The 4/29 dentist-appointment investigation surfaced two distinct root causes, each fixed structurally — and an unrelated UX refactor we held off shipping in v26.04.29.2.
Event store: data integrity at every boundary
4c58603— Replaceend_dtcolumn withduration_minutes(Fable #160). Schema migration 0043. End-before-start is now structurally inexpressible (CHECK constraintduration_minutes >= 0). The corrupt prod row that started this whole investigation collapses cleanly to a point event during the migration backfill. Wire format unchanged —to_dict()emitsend_dtas derived fromstart_dt + duration_minutes. Behavioral upgrade: moving an event's start now slides the effective end forward (preserving duration), instead of corrupting or hard-rejecting.84640a0—update_event/delete_eventrefuse ambiguous queries (Fable #161). Whenquerymatches multiple events, the tool returnssuccess: falsewith acandidatesarray of{id, title, start_dt, location}. The model picks one by passingevent_idon the next call. This is the actual root cause of how event id=2 got mutated in the first place: pre-fix, both tools silently tookmatches[0]. For delete in particular, the tool description leans into "never guess between candidates."The two are complementary: #160 makes invalid data inexpressible at storage; #161 makes the wrong event unmutatable at the tool layer.
Calendar UX
2db23ce—EventSlideOverredesigned as a centered modal. No Save / Cancel buttons; auto-save on close (X / Esc / backdrop click / Enter in form field). Trash icon in the header (edit mode only) opens an inline two-step confirm. Validity-aware: invalid form in edit mode → toast naming the missing field + discard; in create mode → silent discard. The right-edge slide-over was hiding the destructive ghost-style Delete button against a thin floor band; the centered modal eliminates the contrast pocket entirely.Reverted in-flight
b7e7073reverts94b169f— the A+B hotfix (filter robustness + write-side end-vs-start check). Superseded by #160 which makes the same scenarios structurally impossible.Test plan
end_dt > start→ minute count;end_dt <= startOR null → NULLduration_minutes=NULLfrom the migration backfill)event_idEventSlideOvermodal renders centered with auto-save behavior on next deployNote on CI
The dev-branch CI on
84640a0failed only on theBuild & push imagestep (registry returned a genericunknownerror after a successful build). Same transient infra flake we hit on35fab6cearlier today; all code gates (typecheck, lint, tests, build) passed. The release-tag push will run a fresh build.🤖 Generated with Claude Code