Skip to content

feat(client): schedule custom snooze times - #6082

Open
PixPMusic wants to merge 6 commits into
pingdotgg:mainfrom
PixPMusic:pixpmusic/snooze-for
Open

feat(client): schedule custom snooze times#6082
PixPMusic wants to merge 6 commits into
pingdotgg:mainfrom
PixPMusic:pixpmusic/snooze-for

Conversation

@PixPMusic

@PixPMusic PixPMusic commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Adds an Until… choice beside the existing presets so users can choose an exact local date and time.
  • Covers the web/desktop row popover, thread context menus, chat actions, and multi-select actions while preserving navigation, Undo, Wake, and partial-failure behavior.
  • Uses the themed panel dialog on web/desktop, an iOS form sheet, and the existing mobile form pattern on Android.
  • Shares default-time and validation rules across clients, including daylight-saving gap and repeated-hour handling in the browser.
  • Documents custom snoozing; no server, provider, wire-contract, or desktop IPC changes are required.

Why

The preset choices work for common cases, but they cannot express a specific date and time. Custom scheduling makes snooze useful for deadlines, handoffs, and planned follow-ups without changing the underlying snooze model.

Related prior proposal: #4677. This implementation was built fresh from current main and extends the feature across web, desktop, iPhone, iPad split view, and Android foldable layouts.

UI Changes

  • Desktop: themed Snooze until panel with a local date/time control.
  • iPhone/iPad: native form-sheet presentation with a combined date/time picker.
  • Android: responsive form with separate native date and time dialogs; verified folded and unfolded on Pixel Fold.

Before

Desktop preset-only snooze menu:

Desktop snooze menu before custom scheduling

After

Desktop context menu Desktop themed panel
Desktop context menu with Until option Desktop themed Snooze until panel
iPhone menu iPhone form iPad menu iPad form
iPhone Until menu entry iPhone native Snooze until form iPad split-view Until menu entry iPad Snooze until form sheet
Pixel Fold folded menu Pixel Fold folded form Pixel Fold unfolded menu Pixel Fold unfolded form
Pixel Fold folded Until menu entry Pixel Fold folded Snooze until form Pixel Fold unfolded Until menu entry Pixel Fold unfolded Snooze until form

Evidence is stored outside the feature branch in this immutable fork commit.

Verification

  • pnpm --filter @t3tools/mobile test — 102 files, 626 tests passed
  • Focused shared/web/mobile tests — 4 files, 49 tests passed
  • Mobile, web, and client-runtime typechecks passed
  • Targeted lint, formatting, and git diff --check passed
  • Integrated verification: desktop, iPhone, iPad split view, Pixel Fold folded, Pixel Fold unfolded

Checklist

  • Web and desktop entry points
  • Mobile compact and split-view entry points
  • Reverse state remains available through Undo and Wake
  • Local, remote, and tunnel behavior reuse the existing snooze command
  • User documentation updated
  • Screenshots captured outside the code branch

Model: GPT-5.6 Sol | Harness: Codex in T3 Code


Note

Low Risk
Client-only UI and shared validation around the existing snooze command; DST parsing is covered by tests but is the main subtlety.

Overview
Adds Until… beside snooze presets so users can pick an exact local wake time. Web/desktop wires the choice through the sidebar popover, thread context menus, and bulk snooze; it opens a global SnoozeForDialog with a datetime-local field and DST-aware parsing in Sidebar.snooze.ts. Mobile registers a SnoozeFor route/sheet from thread list and iPad sidebar menus, with iOS inline datetime picker and Android date/time dialogs plus UTC merge helpers.

client-runtime gains resolveSnoozeForDefault (15-minute step, ≥1 hour ahead) and snoozeForTimeError for shared validation. Snooze handlers now take ISO snoozedUntil strings instead of preset objects. User docs note custom snoozing; no server or wire changes.

Reviewed by Cursor Bugbot for commit f926ffe. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add custom snooze time scheduling via 'Until…' action on web and mobile

  • Adds a new "Until…" snooze option to thread rows and context menus on both web and mobile, opening a dedicated UI for picking a custom snooze date/time.
  • On web, a global SnoozeForDialog renders a datetime-local input seeded with resolveSnoozeForDefault (next 15-minute boundary ≥1 hour ahead) and validates input with shared snoozeForTimeError from client-runtime.
  • On mobile, a new SnoozeFor route presents as a form sheet (iOS) or card screen (Android); Android uses split date/time pickers with resolveAndroidPickerValue and mergeAndroidPickerValue to handle timezone-safe merging of selected parts.
  • Shared logic in packages/client-runtime/src/state/threadSettled.ts provides resolveSnoozeForDefault and snoozeForTimeError for consistent defaults and validation across platforms.
  • Web parsing in apps/web/src/components/Sidebar.snooze.ts handles DST edge cases and repeated local times using a ±2 day candidate window.

Macroscope summarized f926ffe.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a449a9ef-54c4-40ab-b7da-cb77fa7411f6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 11, 2026
Comment thread apps/web/src/components/Sidebar.snooze.ts Outdated
Comment thread apps/web/src/components/Sidebar.snooze.ts Outdated

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 19a0a98. Configure here.

Comment thread apps/mobile/src/features/threads/SnoozeForRouteScreen.tsx
@macroscopeapp

macroscopeapp Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature adding custom snooze time selection across mobile and web platforms. New screens, dialogs, navigation routes, and datetime parsing logic with DST edge case handling represent significant new user-facing behavior warranting human review.

You can customize Macroscope's approvability policy. Learn more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL 500-999 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant