Skip to content

fix(web): a scheduled task with a cleared run time no longer saves as 09:00 - #29870

Open
saphid wants to merge 3 commits into
pingdotgg:mainfrom
saphid:fix/silentfallback
Open

saphid wants to merge 3 commits into
pingdotgg:mainfrom
saphid:fix/silentfallback

Conversation

@saphid

@saphid saphid commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Clearing or partly filling a fixed-time scheduled task's native time input reports an empty value. Saving silently replaced the task's time with 09:00 instead of reporting an error, so an existing 14:30 task could move to 09:00.

Change

Reject an empty fixed-time draft with “Invalid run time / Pick a time.” through the existing validation/toast path, and remove the 09:00 save fallback. The 09:00 default for new tasks remains. Mobile and the shared contract already reject invalid times.

The integration with main retains #29851's stored-hour padding and its regression test alongside the cleared-time regression. This remains one small fix for a documented form silently saving a different time.

Scope and approval

This changes only the web Scheduled Tasks save validation, also used by desktop. It is proposed as a small, focused fix for a form silently saving a different time: clearing an existing time must not silently reschedule it to 09:00. It adds no scheduling mode or configuration, and the initial 09:00 value for new tasks remains.

Macroscope requires human confirmation that removing the implicit save-time fallback is the intended behavior. That maintainer decision is pending; no maintainer approval is claimed.

Related #24216 also blocked empty/incomplete input as part of a broader time-format and model-options change. It closed unmerged. This PR retains the native input and fixes only the silent 09:00 fallback.

Verification

At bcea0b0, integrated with main 6647b0a:

  • The existing regression fails with the exact main logic: an empty time returns a 09:00 schedule instead of null. The integrated scheduling suite passes 25/25, including the stored-hour padding test.
  • CI=true vp run check:changed 6647b0a761ff7a1287047a9bb5fd5b63772f456b passes format, lint, knip, two package typechecks, scheduling tests and React compiler validation.
  • Fresh independent read-only review by Claude Opus 5.5, high reasoning, through T3's claudeAgent provider: APPROVE, no actionable findings. The committed patch matches the frozen reviewed patch.

Maria's real-client receipt reports Linux Chrome verification at 89db860, against base 61c3794c. Base saved 09:00 after clearing 14:30. The candidate rejected both empty and partial times; cancel/reload/reopen retained 14:30. A valid 16:45 edit and a 17-minute interval persisted, and Run now completed a real Codex automation. These are supplied observations, not a new client run by this follow-up agent.

The captures below are rehosted unchanged from that earlier run. The validation and save-error path they demonstrate remain unchanged by this integration; they are not captures of the current head. Current integration proof is automated.

Before — recorded base silently saved 09:00

Recorded base task after clearing its 14:30 time

After — recorded candidate rejects the empty time

Recorded candidate shows Invalid run time and leaves the editor open

Recorded candidate: partial-input rejection and reopening at 14:30

Maria's earlier candidate interaction rejecting partial input and retaining 14:30

Limits: no fresh current-head client capture, native iOS/Android, Electron-specific, macOS/Windows or remote/tunnel verification. The earlier runtime used Run now; it did not wait for the next wall-clock dispatch. Other providers and webhooks were not exercised.

Originally implemented with Claude Opus 5.5 in Claude Code (T3 Code), with an independent GPT-6.1 Sol review. Maria's client verification used GPT-6.1 Sol through Codex. Conflict integration and this evidence/description follow-up used GPT-6.1 Sol through the Codex harness in T3 Code.

… 09:00

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Nov 3, 2026
@macroscopeapp

macroscopeapp Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs Human Approval

Macroscope's review found this PR requires human approval — Cleared run times now block saving rather than silently becoming 09:00. Human confirmation is needed for removing that implicit save-time default; new tasks still initially show 09:00.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

Fixed-time scheduled-task drafts now return an “Invalid run time” error when the time is empty. Schedule conversion no longer replaces an empty time with “09:00”. A test checks that 14:30 round-trips and an empty time returns null.

Changes: Fixed-time schedule validation

Layer / File(s) Summary
Validate and convert fixed-time drafts
apps/web/src/components/settings/scheduledTasksSettings.logic.ts, apps/web/src/components/settings/scheduledTasksSettings.logic.test.ts
Empty fixed-schedule times produce an “Invalid run time” error. Conversion no longer substitutes “09:00”. The test checks that 14:30 round-trips and an empty time returns null.

Estimated code review effort: 2 (Simple) | ~7 minutes

Change: Bug fix

Possibly related PRs

  • pingdotgg/t3code#24216: Validates fixed-time input and prevents saving an empty or incomplete time, covering the same blank-time path.

Suggested reviewers: macroscopeapp, t3dotgg, binjamshid

Merge Risk: Minimal · up to bcea0

The change rejects cleared fixed times instead of silently saving 09:00. No merge-blocking issue is identified.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title names the actual change: a fixed-time scheduled task with a cleared run time no longer saves as 09:00. It matches the raw summary, which says the empty fixed-schedule time now yields a valid…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The description follows the repository template closely. The Problem section states the bug: clearing or partly filling a fixed-time task's time input saved 09:00 silently, moving an existing 14:30 ta…
Full details: Title check

Explanation

The title names the actual change: a fixed-time scheduled task with a cleared run time no longer saves as 09:00. It matches the raw summary, which says the empty fixed-schedule time now yields a validation error and no longer falls back to "09:00". It follows the conventional commit form the template asks for.

Full details: Description check

Explanation

The description follows the repository template closely. The Problem section states the bug: clearing or partly filling a fixed-time task's time input saved 09:00 silently, moving an existing 14:30 task. The Change section explains the validation fix and removal of the 09:00 save fallback, and it keeps the 09:00 default for new tasks. The Scope and approval section explains why the change is a small, focused fix and states that no maintainer approval is claimed. It notes that a maintainer decision on the removed fallback is pending. The Verification section gives specific commits, test counts (25/25 integrated suite, 23/23 earlier), check commands, and a real-client receipt with before/after screenshots. It also lists the limits of the verification. Minor gaps: the template asks for a conventional commit title, and the PR objectives cite the title as the fix(web) form, so that part is satisfied. The author flags that the pending maintainer approval is not yet granted, which means the scope gate is not fully cleared under the template's rules. The description is complete and specific, so it passes.

Finishing Touches

Generate unit tests (beta)

  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 0af87c2 and bcea0b0.

Files selected for processing: 1

  • apps/web/src/components/settings/scheduledTasksSettings.logic.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

@coderabbitai coderabbitai 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.

  • Fix comments: Fix CodeRabbit comments on this PR

@maria-rcks

maria-rcks commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

Verified in a real dev environment

verified unchanged head 89db8601e6729d13918ebe9245c2fc6366806ae9 on linux with repo playwright and /usr/bin/google-chrome against real background dev servers, one at a time.

  • reproduced on github/main (61c3794c32): created a project for a real git repo and a 14:30 scheduled task through the app. clearing its time and saving silently persisted 09:00; reopening confirmed it.
  • on the pr, clearing the same task shows "Invalid run time / Pick a time." and leaves the editor open. cancel, reload, and reopen confirmed the saved time remained 14:30.
  • deleting only the minutes also produces an empty native input value and rejects saving. the recording shows partial input and reopening at 14:30.
  • nearby behavior: a valid 16:45 edit persisted; a 17-minute interval persisted across reload; switching back to fixed time and weekday selection worked.
  • "Run now" used real Codex gpt-6.1-sol, created an automation thread, returned SCHEDULE_VERIFY_OK, and recorded success. a normal composer turn also completed on main. no mocks, fixtures, or replay provider were used.
  • blacksmith: vp test run apps/web/src/components/settings/scheduledTasksSettings.logic.test.ts passed 23/23. existing head CI is green. no source changes or pushes were needed.

main silently persisted 09:00 after clearing 14:30

pr rejects an empty run time

pr retains 14:30 and records successful execution

partial input rejection and reopening at 14:30

real codex automation response

read-only query of the dev server database after the UI flow:

title: Run time verification
schedule: fixed_time, 14:30, weekdays [1,2,3,4,5]
model: codex / gpt-6.1-sol
last_run_status: succeeded
last_run_error: null
run_count: 1

Not verified

native ios/android clients, electron shell, macos/windows, and remote/tunnel connections were not exercised on this linux web path. did not wait for the next wall-clock 14:30 dispatch; execution was verified through "Run now". other providers and webhook delivery were outside this focused change.

# Conflicts:
#	apps/web/src/components/settings/scheduledTasksSettings.logic.test.ts

This branch has not been deployed

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

Labels

size:XS 0-9 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants