Repository navigation
[TW-7527] fix(@ownmail/app): preserve intent across mail and calendar workflows - #374
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e3a1143a9d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| function changeEventDate(date: string) { | ||
| setEventDate(date) | ||
| setEndDate(editorDateOffset(date, Math.floor(endHour / 24))) | ||
| setStartChoice(null) | ||
| setEndChoice(null) |
There was a problem hiding this comment.
Preserve duration when changing the event date
When a timed event's date is changed across a DST boundary, this retains the old wall-clock end instead of recomputing it from lastDuration. For example, moving a 01:30–02:30 event to 2026-03-08 in America/Toronto leaves a nonexistent 02:30 end and prevents saving; a fall-back date can similarly change the elapsed duration. Derive the new end instant from the selected start plus the preserved duration, as changeStartHour already does.
Useful? React with 👍 / 👎.
OwnMail now protects user intent across inbox cleanup, interrupted composition, search, and scheduling. Bulk actions work consistently in folders and search results, explicitly target loaded conversations, retain failed selections, and provide aggregate Undo with retry. Mobile selection uses the existing bottom bar and restores keyboard focus after recovery.
Draft autosave tracks edit revisions, so a slow response cannot mark newer typing as saved. Persistent save status, failure feedback and Retry preserve the latest recipient and message edits, including cleared fields. Populated-draft deletion and empty-subject sending require deliberate choices. Search handles empty-field suggestions, IME input, stale selections, duplicate submissions, and clear-focus recovery; draft Resume hydration is also corrected.
Calendar editing shows the time zone and end date, preserves elapsed duration across midnight and daylight-saving changes, and requires a first/second occurrence choice for ambiguous local times. Metadata-only edits retain original timestamps. Dirty editors protect Close, Cancel, Escape, module navigation, Back, and reload.
Validation:
Research, sources, frozen persona rubric and reusable calculator.
Independent task-based evaluation improved from mean 6.67 to 8.50; all six personas reach the raised 8.5 minimum. These are synthetic expert assessments, not observed recommendation probabilities or NPS. Remaining limits include loaded-only batches, some bulk keyboard friction, and no durable unfinished-event recovery after browser termination. Real providers, physical devices and assistive technologies were not exercised. GitHub checks are queued; this draft PR has not been merged or deployed.
Tracks TW-7527 under TW-5882.