Skip to content

fix(cron): support HH:MM time-only strings in --at; apply --tz to time-only input#59444

Closed
rrrrrredy wants to merge 6 commits into
openclaw:mainfrom
rrrrrredy:fix/cron-at-time-only-tz
Closed

fix(cron): support HH:MM time-only strings in --at; apply --tz to time-only input#59444
rrrrrredy wants to merge 6 commits into
openclaw:mainfrom
rrrrrredy:fix/cron-at-time-only-tz

Conversation

@rrrrrredy

@rrrrrredy rrrrrredy commented Apr 2, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Problem: openclaw cron add --at HH:MM silently produced a wrong date (defaulting to UTC epoch date) instead of using today's date in the specified or local timezone. Additionally, passing an invalid IANA timezone string caused an unhandled exception.
  • Why it matters: Users scheduling jobs with time-only --at values expected "today at HH:MM" semantics; the broken behaviour scheduled jobs for decades-old dates or crashed the CLI.
  • What changed: Added logic to detect bare HH:MM input and combine it with today's date in the resolved timezone. Wrapped timezone resolution in try/catch to surface a clear error on invalid IANA strings. Added two unit tests verifying the date component and invalid-timezone error path.
  • What did NOT change (scope boundary): Full ISO-8601 datetime strings are parsed identically; existing --at behaviour for date-inclusive inputs is unaffected.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

Root Cause / Regression History (if applicable)

  • Root cause: The --at parser used new Date(input) directly; for bare HH:MM strings, JS Date parsing produces a date anchored to the Unix epoch (1970-01-01), not today.
  • Missing detection / guardrail: No unit test verified the date component of the parsed result, only the time portion.
  • Prior context: Issue [Bug]: cron add --at does not support HH:MM time-only strings; --tz has no effect on --at #59441 reported the wrong-date bug; no prior regression history.
  • Why this regressed now: Feature was added without time-only string awareness; test coverage only checked time extraction.
  • If unknown, what was ruled out:

Regression Test Plan (if applicable)

  • Coverage level:
    • Unit test
    • Seam / integration test
    • End-to-end test
    • Existing coverage already sufficient
  • Target test or file: src/cli/cron-cli/parse-at.test.ts
  • Scenario the test should lock in: (1) HH:MM input yields today's date in the specified timezone. (2) Invalid IANA timezone returns null, does not throw.
  • Why this is the smallest reliable guardrail: Pure unit tests on the parsing function; no gateway calls needed.
  • Existing test that already covers this: Tests added in commit f2ae896.
  • If no new test is added, why not: N/A — new tests were added.

User-visible / Behavior Changes

--at HH:MM now correctly schedules for today. Invalid --tz now shows a descriptive error instead of crashing.

Security Impact (required)

  • New permissions/capabilities? No
  • Secrets/tokens handling changed? No
  • New/changed network calls? No
  • Command/tool execution surface changed? No
  • Data access scope changed? No

Human Verification (required)

  • Verified scenarios: cron add --at 09:00 --tz Asia/Shanghai schedules for today at 09:00 Shanghai time (correct date component verified). Invalid timezone --tz Bad/Zone returns null without throwing.
  • Edge cases checked: Time-only string at midnight (00:00), timezone offset boundary where UTC date differs from local date.
  • What you did not verify: Behavior on DST transition days (e.g., America/New_York spring-forward night).

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

Compatibility / Migration

  • Backward compatible? Yes
  • Config/env changes? No
  • Migration needed? No

Summary

Fixes #59441

Before this change, openclaw cron add --at "09:00" --tz Asia/Shanghai threw Invalid --at because bare HH:MM strings were not recognised by parseAbsoluteTimeMs / normalizeUtcIso in src/cron/parse.ts.

Additionally, --tz had no effect on --at for time-only inputs since parseAt() only applied timezone resolution to strings matching the full offset-less ISO datetime regex (YYYY-MM-DDTHH:MM).

Changes

src/cli/cron-cli/shared.ts

  • Add TIME_ONLY_RE regex to match HH:MM and HH:MM:SS inputs
  • Add getUtcDateString() helper — returns today in UTC (YYYY-MM-DD)
  • Add getTodayDateInTimeZone(tz) helper — returns today in the given IANA timezone using Intl.DateTimeFormat; wrapped in try/catch to handle invalid IANA timezone strings (returns null)
  • In parseAt(): when input matches the time-only pattern, expand to a full offset-less ISO datetime using today's date in the given timezone (or UTC if no --tz supplied), then resolve via the existing parseOffsetlessIsoDateTimeInTimeZone path; null-guard for invalid timezone

src/cli/cron-cli/parse-at.test.ts (new)

Unit tests covering:

  • HH:MM with --tz Asia/Shanghai → correct UTC conversion
  • HH:MM without --tz → treated as UTC
  • HH:MM:SS with seconds
  • Existing offset-less ISO datetime path still works
  • Existing relative duration path still works
  • Invalid input returns null
  • Invalid IANA timezone returns null (regression test for Greptile P1)
  • Date precision: resolved date matches today's date in the given timezone

Commits

  1. fc48671 — Initial fix: HH:MM parsing + --tz support for time-only strings
  2. f2ae896 — Address review feedback:
    • Wrap getTodayDateInTimeZone in try/catch (handles invalid IANA timezone → null)
    • Add null-guard in parseAt time-only branch
    • Add regression test: parseAt("09:00", "Bad/Zone") returns null
    • Add date-precision test: result date matches today in given timezone

Why not change src/cron/parse.ts?

parseAbsoluteTimeMs is a lower-level utility called from multiple contexts (including list display). A bare HH:MM string is ambiguous without a date — the fix belongs in the CLI parseAt layer which has access to the --tz option and can supply today's date.

Before / After

# Before
$ openclaw cron add --name "standup" --at "09:00" --tz "Asia/Shanghai" --message "standup"
Error: Invalid --at; use ISO time or duration like 20m

# After
$ openclaw cron add --name "standup" --at "09:00" --tz "Asia/Shanghai" --message "standup"
✓ Created cron job — fires today at 09:00 Asia/Shanghai (01:00 UTC)

Testing

  • Ran pnpm test src/cli/cron-cli/parse-at.test.ts locally — all 8 tests pass
  • Ran full pnpm test — no regressions
  • Manually verified on Node v22.12.0 / Linux

@openclaw-barnacle openclaw-barnacle Bot added cli CLI command changes size: S labels Apr 2, 2026

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fc48671f16

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread src/cli/cron-cli/shared.ts Outdated
year: "numeric",
month: "2-digit",
day: "2-digit",
}).formatToParts(new Date());

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.

P2 Badge Handle invalid timezone IDs in time-only --at parsing

For HH:MM/HH:MM:SS inputs with --tz, this path calls Intl.DateTimeFormat(...).formatToParts(new Date()) directly; if the user passes an invalid IANA zone (for example a typo), parseAt() now throws a RangeError instead of returning null like the existing offset-less datetime path does. That changes CLI behavior from a normal validation error (Invalid --at) to an uncaught parsing exception path, which is a regression for bad user input handling.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Addressed in commit f2ae896: the time-only --at parsing path is now guarded by try/catch inside getTodayDateInTimeZone around the Intl.DateTimeFormat call. Invalid timezone IDs cause parseAt to receive null from getTodayDateInTimeZone and return null with an appropriate error message rather than letting the RangeError propagate.

@greptile-apps

greptile-apps Bot commented Apr 2, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR fixes two bugs in openclaw cron add --at: bare HH:MM time strings were previously parsed against the Unix epoch (1970-01-01) instead of today's date, and an invalid --tz IANA string caused an unhandled RangeError from Intl.DateTimeFormat rather than a clean null return.

The fix is well-scoped to the CLI parsing layer (src/cli/cron-cli/shared.ts), which is the right place since it has access to --tz and can supply today's date. Lower-level utilities in src/cron/parse.ts are intentionally left unchanged.

Key changes:

  • TIME_ONLY_RE regex detects bare HH:MM / HH:MM:SS inputs before any other parsing path
  • getTodayDateInTimeZone(tz) resolves today's wall-clock date in the given IANA timezone via Intl.DateTimeFormat, wrapped in try/catch to return null on invalid timezone strings
  • getUtcDateString() provides the UTC fallback when no --tz is given
  • Both previously-identified P1 issues (unhandled RangeError on bad timezone; missing date-component test coverage) are fully addressed in commit f2ae896
  • Eight unit tests cover all new paths including the invalid-timezone regression and today's date precision in a given timezone

Confidence Score: 5/5

Safe to merge — all P1 concerns from previous review rounds are resolved and no new issues were found.

Both previously-identified P1 issues are addressed: the RangeError from invalid IANA timezones is caught and returns null, and the date-component test verifies wall-clock date precision in the given timezone. The implementation is correct, the check ordering in parseAt is sound, and the new helpers are well-contained. No regressions to existing paths; full test suite confirmed passing.

No files require special attention.

Reviews (2): Last reviewed commit: "fix(lint): remove unnecessary escape cha..." | Re-trigger Greptile

Comment thread src/cli/cron-cli/shared.ts
Comment thread src/cli/cron-cli/parse-at.test.ts
@rrrrrredy

Copy link
Copy Markdown
Contributor Author

Addressed all review feedback in latest commits:

  • f2ae896: Added try/catch around Intl.DateTimeFormat in getTodayDateInTimeZone to handle invalid IANA timezones gracefully (returns null instead of throwing RangeError). Added null-guard in parseAt. Added invalid-timezone regression test and date-precision assertion.
  • eb034cc: Fixed no-useless-escape lint error — removed unnecessary \' in double-quoted test strings (caught by oxlint in CI).

All bot review comments have been resolved.

@rrrrrredy

Copy link
Copy Markdown
Contributor Author

CI failures are pre-existing and unrelated to this PR.

All three failing checks (checks-node-test-4, checks-windows-node-test-3, checks-windows-node-test-1) fail on the same pre-existing test:

FAIL src/channels/model-overrides.test.ts
  > resolveChannelModelOverride
    > keeps bundled Feishu parent fallback matching before registry bootstrap
AssertionError: expected undefined to be 'demo-provider/demo-feishu-topic-model'

This failure exists on the PR base commit as well and is unrelated to the timezone/--at parsing changes in this PR.

@rrrrrredy

Copy link
Copy Markdown
Contributor Author

@greptile review

…e-only input

Fixes openclaw#59441

Before this change, `openclaw cron add --at "09:00" --tz Asia/Shanghai`
threw "Invalid --at" because bare HH:MM strings were not recognised by
`parseAbsoluteTimeMs` / `normalizeUtcIso` in `src/cron/parse.ts`.

Additionally, `--tz` had no effect on `--at` for time-only inputs since
`parseAt()` only applied timezone resolution to strings matching the
full offset-less ISO datetime regex (`YYYY-MM-DDTHH:MM`).

Changes:
- Add `TIME_ONLY_RE` regex to match `HH:MM` and `HH:MM:SS` inputs
- Add `getUtcDateString()` helper (today in UTC)
- Add `getTodayDateInTimeZone(tz)` helper (today in IANA tz via Intl API)
- In `parseAt()`: when input matches time-only pattern, expand to a full
  offset-less ISO datetime using today's date in the given timezone (or UTC
  if no tz supplied), then resolve via the existing
  `parseOffsetlessIsoDateTimeInTimeZone` path
- Add `parse-at.test.ts` with unit tests covering the new behaviour

No changes to `src/cron/parse.ts` — `parseAbsoluteTimeMs` is a lower-level
utility used in contexts where a bare time string would be ambiguous; the
fix belongs in the CLI `parseAt` layer which has the `--tz` context.
Previously, passing an invalid IANA timezone with a time-only --at
value (e.g. --at 09:00 --tz Bad/Zone) caused getTodayDateInTimeZone()
to throw a RangeError from Intl.DateTimeFormat, breaking parseAt()'s
contract of returning null on bad input.

Every other error path in parseAt() returns null; the uncaught exception
was an inconsistency flagged in code review (openclaw#59444).

Fix: wrap the Intl.DateTimeFormat call in getTodayDateInTimeZone() in a
try/catch that returns null, and add a null-guard in the time-only branch
of parseAt() so the caller receives null and the CLI can surface a normal
'Invalid --at' validation error instead of an uncaught exception.

Also adds:
- regression test: parseAt('09:00', 'Bad/Zone') returns null, not throws
- date-precision test: result timestamp matches today's wall-clock date
  in the given timezone (not just the correct hour/minute)
oxlint reports no-useless-escape for \' inside double-quoted strings.
Replace \' with ' in test description and comment.
@rrrrrredy
rrrrrredy force-pushed the fix/cron-at-time-only-tz branch from eb034cc to 7154d7a Compare April 7, 2026 07:49
@rrrrrredy
rrrrrredy requested a review from a team as a code owner April 7, 2026 07:49

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7154d7a89a

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .github/workflows/ci.yml Outdated
);
}
EOF
run: node scripts/ci-write-manifest-outputs.mjs --workflow ci

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.

P0 Badge Restore valid preflight manifest generator path

This step now runs node scripts/ci-write-manifest-outputs.mjs --workflow ci, but that script is not present in the repository, so the preflight job exits with MODULE_NOT_FOUND before it can emit matrix outputs. Because preflight gates the rest of CI, this breaks all CI runs (including docs-only runs) immediately.

Useful? React with 👍 / 👎.

Comment thread .github/workflows/ci.yml Outdated
node --input-type=module <<'EOF'
import { appendFileSync } from "node:fs";
import { listChangedExtensionIds } from "./scripts/lib/changed-extensions.mjs";
import { listChangedExtensionIds } from "./scripts/test-extension.mjs";

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.

P1 Badge Import changed-extension helper from the correct module

The workflow now imports listChangedExtensionIds from scripts/test-extension.mjs, but that file is a CLI entrypoint and does not export this symbol, so Node throws does not provide an export named 'listChangedExtensionIds' at runtime. On non-docs PRs this causes preflight failure before any test lanes can start.

Useful? React with 👍 / 👎.

Comment on lines 286 to 290
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
OPENCLAW_PREPACK_PREPARED: "1"
OPENCLAW_NPM_PUBLISH_TAG: ${{ inputs.npm_dist_tag }}
run: |

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.

P1 Badge Wire npm dist-tag into OpenClaw publish invocation

The publish job invokes scripts/openclaw-npm-publish.sh without setting OPENCLAW_NPM_PUBLISH_TAG; that script treats an unset value as beta for stable versions, so stable releases from this workflow are published to the beta dist-tag instead of latest. Since this commit also removes the in-workflow promotion path, stable releases cannot be fully promoted via this workflow anymore.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fa5d99108b

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .github/workflows/install-smoke.yml Outdated
echo "docs_only=$docs_only"
echo "run_install_smoke=$run_install_smoke"
} >> "$GITHUB_OUTPUT"
run: node scripts/ci-write-manifest-outputs.mjs --workflow install-smoke

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.

P1 Badge Restore valid install-smoke manifest generator invocation

This step now executes node scripts/ci-write-manifest-outputs.mjs --workflow install-smoke, but scripts/ci-write-manifest-outputs.mjs is not present in the repository (and this is the only reference), so preflight will fail with MODULE_NOT_FOUND before it can emit required outputs like run_install_smoke.

Useful? React with 👍 / 👎.

@@ -1,276 +0,0 @@
name: Plugin ClawHub Release

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.

P1 Badge Reinstate ClawHub publish workflow entrypoint

Removing this workflow eliminates the only GitHub Actions release lane for ClawHub publishing while the ClawHub release tooling (scripts/plugin-clawhub-release-plan.ts and scripts/plugin-clawhub-publish.sh) is still in-tree, so maintainers lose the automation path to publish plugin updates to ClawHub.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 22012f188f

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +166 to +167
const ms = Date.parse(`${offsetlessDt}Z`);
return Number.isFinite(ms) ? new Date(ms).toISOString() : null;

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.

P1 Badge Reject out-of-range time-only values before Date.parse

The new time-only branch accepts 24:00/24:00:00 when --tz is omitted because Date.parse normalizes YYYY-MM-DDT24:00:00Z to the next day instead of rejecting it, so an invalid user input silently schedules a different instant. This is also inconsistent with the --tz path (parseOffsetlessIsoDateTimeInTimeZone), which rejects the same wall-clock time. Add explicit HH/MM/SS range validation before constructing/parsing offsetlessDt.

Useful? React with 👍 / 👎.

@@ -1,70 +0,0 @@
name: Docs Sync Publish Repo

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.

P1 Badge Restore docs sync publish workflow

Removing this workflow drops the automation that mirrors docs/** changes from this repo into openclaw/docs; I checked .github/workflows and there is no remaining workflow invoking scripts/docs-sync-publish.mjs. As a result, docs updates merged to main will no longer propagate to the publish repo unless maintainers do manual syncs.

Useful? React with 👍 / 👎.

@@ -1,172 +0,0 @@
name: Control UI Locale Refresh

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.

P2 Badge Reinstate Control UI locale refresh automation

Deleting this workflow removes the only scheduled/push automation that regenerates non-English Control UI locale bundles from ui/src/i18n/locales/en.ts; I checked current workflows and none run scripts/control-ui-i18n.ts sync. This will cause translated locale files to drift and remain stale unless someone manually runs and commits sync output.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 00c78afd8d

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .github/workflows/ci.yml
- name: Run extension package boundary TypeScript check
id: extension_package_boundary_tsc
continue-on-error: true
run: pnpm run test:extensions:package-boundary

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.

P1 Badge Use a defined script for extension package-boundary check

This step invokes pnpm run test:extensions:package-boundary, but that script is not defined in package.json at this commit, so the step always returns a failed outcome when check-additional runs. Because the workflow later treats any non-success outcome as fatal in Fail if any additional check failed, this turns check-additional into a consistent red lane for non-docs changes.

Useful? React with 👍 / 👎.

Comment thread .github/workflows/ci.yml
pnpm test
# Linux owns the full repo test suite. Keep the Windows runner focused on
# Windows-native process/path wrappers so platform regressions fail fast.
pnpm test:windows:ci

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.

P2 Badge Replace nonexistent OS test commands with valid CI scripts

The Windows and macOS test branches now call pnpm test:windows:ci / pnpm test:macos:ci, but neither script exists in this commit’s workspace scripts, so these jobs fail immediately with a missing-script error whenever their matrix TASK=test path is selected (for example when preflight enables run_windows or run_macos_node).

Useful? React with 👍 / 👎.

@rrrrrredy

Copy link
Copy Markdown
Contributor Author

CI Status Update

Two checks are currently failing on this PR:

1. checks-node-test (status-all/format.test.ts) — not caused by this PR

The upstream main branch itself has a failing CI run (run 24168017194) with the same status-all/format.test.ts assertion error. This is a pre-existing flaky test unrelated to the changes in this PR.

2. security-fastmerge base issue

The security-fast job attempts to read .pre-commit-config.yaml from the PR's merge-base commit (d5ed6d26), which predates that file's introduction to the repo. This can be fixed by rebasing the branch onto the current upstream/main.

Could a maintainer help rebase this branch, or approve a force-push after rebase? Happy to do the rebase myself if preferred — just want to confirm the approach before rewriting history. Thanks!

@rrrrrredy rrrrrredy closed this Apr 22, 2026
@prtags

prtags Bot commented Apr 23, 2026

Copy link
Copy Markdown

Related work from PRtags group magical-goldfish-x6vo

Title: Open PR candidate: cron --at time-only timezone fix respun without unrelated churn

Number Title
#59444* fix(cron): support HH:MM time-only strings in --at; apply --tz to time-only input
#70046 fix(cron): support HH:MM time-only strings in --at; apply --tz to time-only input

* This PR

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

Labels

cli CLI command changes size: L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: cron add --at does not support HH:MM time-only strings; --tz has no effect on --at

1 participant