fix(client): keep coinciding snooze options visible#31959

open1
main
GitHub fork: fix/snooze-weekday-labels
opened5d agobySsldone
View on GitHubTwo-way sync enabledPR last imported 1d ago

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.
BeforeAfter

Written by GPT-6.1-Sol through the Codex harness in T3 Code.

Checks

23 successful · 8 skipped
All checks passed
21a99cb

Added 1 commit

  • fix(client): keep coinciding snooze options visible21a99cb
Synced from GitHub

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.

Synced from GitHub

Explain Change →

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.tsx
Next-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 nameStatusExplanation
Title checkPassedThe title clearly describes the main change: keeping coinciding snooze options visible.
Description checkPassedThe 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 checkPassed[#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 checkPassed[#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

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.tsx
  • packages/client-runtime/src/state/threadSettled.ts
  • packages/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.