fix(client): keep coinciding snooze options visible#31959
On Fridays, “Tomorrow 09:00” and “Saturday 09:00” resolve to the same wake minute, so the duplicate guard silently drops Saturday. Keep configured weekday names recognizable and combine distinct labels into one row, such as Tomorrow · Saturday (9:00). The first setting still supplies the row ID and wake time; sorting, minute deduplication, and selection semantics stay intact. Settings now explain that coinciding options are combined.
This is a focused fix for the missing configured option reported in #31879; it adds no settings or workflow.
Fixes #31879
Validation:
- Confirmed regression coverage fails on the original resolver (4 failures), then passes with the fix.
vp test run packages/client-runtime/src/state/threadSnoozed.test.ts packages/client-runtime/src/state/customSnooze.test.ts apps/mobile/src/features/threads/threadListV2.test.ts apps/web/src/components/settings/SnoozePresetsSettings.logic.test.ts: 117 passed.vp run check:changed: passed format, lint, both knip checks, typechecks for seven affected packages, adjacent tests, and React Compiler coverage.- Chrome on macOS, Friday November 6: configured all six reported presets, reproduced the missing Saturday on the base code, verified the combined row after the fix, and selected it to snooze the thread.
- Independent agent review: no actionable findings.
- Native desktop/mobile clients were traced through their shared resolver and selection consumers but were not manually exercised.
| Before | After |
|---|---|
Written by GPT-6.1-Sol through the Codex harness in T3 Code.
Checks
Added 1 commit
- fix(client): keep coinciding snooze options visible21a99cb
Approvability
Verdict: Approved at 21a99cb
Macroscope's review found this PR approvable — Coinciding snooze options now show their combined labels, and named weekdays remain visible when they fall tomorrow. Existing wake times and selection behavior are preserved, keeping the change limited to presentation.
You can add or adjust custom eligibility rules. Learn more.
No actionable comments were generated in the recent review.
Walkthrough
-
Snooze presets with the same wake time now appear as one menu row with their distinct labels joined together. A next-day weekday preset uses its weekday name, and the settings preview describes duplicate wake times as combined.
Changes: Snooze preset labels and grouping
Layer / File(s) Summary Preset labels and wake-time grouping
packages/client-runtime/src/state/threadSettled.ts,packages/client-runtime/src/state/threadSnoozed.test.ts,apps/web/src/components/settings/SnoozePresetsSettings.tsxNext-day weekday presets use the weekday name. Presets with the same wake minute appear in one row with distinct labels joined by ·; the first preset supplies the row’s other fields. Tests cover label order, row ID, timestamp, and duration/set-time collisions. The settings preview says “Combined with an option above.”Estimated code review effort: 2 (Simple) | ~10 minutes
Change: Bug fix · Severity of issue fixed: Low
Possibly related PRs
- pingdotgg/t3code#26208: Adds configurable snooze presets and removes later presets that share a wake minute.
- pingdotgg/t3code#26427: Sorts snooze settings by wake time, which determines preset order used for combined labels.
- pingdotgg/t3code#23884: Implements configurable presets and removes duplicate wake times using the first slot.
Suggested reviewers:
t3dotgg
Merge Risk: External image Minimal · up to 21a99
-
The change appears ready to merge after normal checks; no actionable issue remains from this review.
Pre-merge checks: Passed 4
-
Check name Status Explanation Title check Passed The title clearly describes the main change: keeping coinciding snooze options visible. Description check Passed The description covers the problem, change, scope, and verification, including screenshots and untested clients. It does not use the template headings or confirm issue triage or maintainer approval. Linked Issues check Passed [ #31879] The resolver keeps weekday names visible and combines distinct labels for presets in the same wake minute. It retains one row and the first preset's ID and wake time. Regression tests cover t…Out of Scope Changes check Passed [ #31879] The resolver change, regression tests, and settings hint support the reported missing-option fix. The changes show no unrelated work.Full details: Linked Issues check
-
Explanation
[
#31879] The resolver keeps weekday names visible and combines distinct labels for presets in the same wake minute. It retains one row and the first preset's ID and wake time. Regression tests cover the Friday case, reversed order, duplicate labels, and duration collisions. Settings explain that coinciding options are combined.
-
Finishing Touches
-
Generate unit tests (beta)
-
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
External image Recent review info
-
External image Run configuration
-
- Source mode: Auto
- Repository: pingdotgg/t3code
- Branch: main
- File: .coderabbit.config.ts
- Commit: 6dcaf6c
- Layers: Repository TS config
- Review profile: CHILL
- Plan: Advanced
- Run ID:
fe3c61eb-376e-4dc4-bc4f-f87e5179b40f
External image Commits
-
Reviewing files that changed from the base of the PR and between 6dcaf6cbe727e520f5ff9d854d3be30c89b42bda and 21a99cbac6efdfa4dcb9390745264bde48e85dd8.
External image Files selected for processing: 3
-
apps/web/src/components/settings/SnoozePresetsSettings.tsxpackages/client-runtime/src/state/threadSettled.tspackages/client-runtime/src/state/threadSnoozed.test.ts
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 6 remain after this review.
External image Recent review info
-
External image Run configuration
-
- Source mode: Auto
- Repository: pingdotgg/t3code
- Branch: main
- File: .coderabbit.config.ts
- Commit: 6dcaf6c
- Layers: Repository TS config
- Review profile: CHILL
- Plan: Advanced
- Run ID:
fe3c61eb-376e-4dc4-bc4f-f87e5179b40f
External image Commits
-
Reviewing files that changed from the base of the PR and between 6dcaf6cbe727e520f5ff9d854d3be30c89b42bda and 21a99cbac6efdfa4dcb9390745264bde48e85dd8.
External image Files selected for processing: 3
-
apps/web/src/components/settings/SnoozePresetsSettings.tsxpackages/client-runtime/src/state/threadSettled.tspackages/client-runtime/src/state/threadSnoozed.test.ts
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 6 remain after this review.
-