Skip to content

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

Closed
rrrrrredy wants to merge 1 commit into
openclaw:mainfrom
rrrrrredy:fix/cron-at-time-only-tz-respin
Closed

fix(cron): support HH:MM time-only strings in --at; apply --tz to time-only input#70046
rrrrrredy wants to merge 1 commit into
openclaw:mainfrom
rrrrrredy:fix/cron-at-time-only-tz-respin

Conversation

@rrrrrredy

@rrrrrredy rrrrrredy commented Apr 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Clean respin of #59444 with the diff scoped to the cron --at parser and the public help/docs surfaces that describe that parser.

  • Support bare HH:MM / HH:MM:SS values in cron add --at via parseAt(input, tz?).
  • Resolve time-only inputs against today's date in UTC by default, or today's date in --tz when provided.
  • Return null for invalid IANA timezone strings and out-of-range time-only values (24:00, 12:60, 12:30:60).
  • Preserve all existing absolute ISO, offset-less ISO, 20m, and +20m semantics.
  • Document the new HH:MM[:SS] accepted format in cron add / cron edit help and cron docs.

Scope

This PR intentionally stays within the current cron CLI schedule parsing and public documentation surface:

  • src/cli/cron-cli/shared.ts
  • src/cli/cron-cli/shared.test.ts
  • src/cli/cron-cli/register.cron-add.ts
  • src/cli/cron-cli/register.cron-edit.ts
  • src/cli/cron-cli/schedule-options.ts
  • src/cli/cron-cli.test.ts
  • docs/cli/cron.md
  • docs/automation/cron-jobs.md

Current main already supports both 20m and +20m duration input. This PR does not change that duration branch.

Real Behavior Proof

  • Behavior or issue addressed: cron add --at now accepts bare time-only HH:MM / HH:MM:SS values, applies --tz to those values, rejects invalid time-only values, preserves duration behavior, and exposes the new accepted format in CLI help/docs.
  • Real environment tested: Windows PowerShell in the OpenClaw repo, Node.js v24.13.0 via npx -y [email protected], branch head b3ae6154ed92fca4356698d587e6a708cd9ca611.
  • Exact steps or command run after this patch: npx -y [email protected] scripts/test-projects.mjs src/cli/cron-cli/shared.test.ts; npx -y [email protected] scripts/test-projects.mjs src/cli/cron-cli.test.ts; npx -y [email protected] node_modules/oxfmt/bin/oxfmt --check --threads=1 --config .oxfmtrc.jsonc src/cli/cron-cli/register.cron-add.ts src/cli/cron-cli/register.cron-edit.ts src/cli/cron-cli/schedule-options.ts src/cli/cron-cli.test.ts docs/cli/cron.md docs/automation/cron-jobs.md; npx -y [email protected] scripts/check-docs-mdx.mjs docs/cli/cron.md docs/automation/cron-jobs.md; npx -y [email protected] node_modules/oxlint/bin/oxlint --tsconfig config/tsconfig/oxlint.core.json src/cli/cron-cli/register.cron-add.ts src/cli/cron-cli/register.cron-edit.ts src/cli/cron-cli/schedule-options.ts src/cli/cron-cli.test.ts; parser and CLI commands shown below.
  • Evidence after fix (screenshot, recording, terminal capture, console output, redacted runtime log, linked artifact, or copied live output): Copied terminal output below from Node.js 24.13.0 test runs, parseAt console output, and real node openclaw.mjs cron add commands using a dummy gateway URL.
  • Observed result after fix: Time-only values produce the expected ISO timestamps, invalid timezone/time-only inputs return null or fail before gateway access, valid 09:00 and --tz Asia/Shanghai CLI inputs pass parser validation and reach the dummy gateway, and help/docs checks pass.
  • What was not tested: No known gaps for parser/help/docs behavior; live job creation against a real Gateway was intentionally not performed because the dummy gateway proof exercises validation without creating a schedule.
  • Proof limitations or environment constraints: The default PATH Node on this Windows host is v20.19.1, which is below the repo >=22.19.0 engine requirement; all accepted verification below used Node.js v24.13.0.

Runtime used for verification:

$ npx -y [email protected] -v
v24.13.0

Targeted test runs:

$ npx -y [email protected] scripts/test-projects.mjs src/cli/cron-cli/shared.test.ts
Test Files  1 passed (1)
Tests       33 passed (33)
[test] passed 1 Vitest shard

$ npx -y [email protected] scripts/test-projects.mjs src/cli/cron-cli.test.ts
Test Files  1 passed (1)
Tests       92 passed (92)
[test] passed 1 Vitest shard

Targeted lint and docs checks:

$ git diff --check
# passed

$ npx -y [email protected] node_modules/oxlint/bin/oxlint --tsconfig config/tsconfig/oxlint.core.json src/cli/cron-cli/register.cron-add.ts src/cli/cron-cli/register.cron-edit.ts src/cli/cron-cli/schedule-options.ts src/cli/cron-cli.test.ts
# passed

$ npx -y [email protected] node_modules/oxfmt/bin/oxfmt --check --threads=1 --config .oxfmtrc.jsonc src/cli/cron-cli/register.cron-add.ts src/cli/cron-cli/register.cron-edit.ts src/cli/cron-cli/schedule-options.ts src/cli/cron-cli.test.ts docs/cli/cron.md docs/automation/cron-jobs.md
All matched files use the correct format.

$ npx -y [email protected] scripts/check-docs-mdx.mjs docs/cli/cron.md docs/automation/cron-jobs.md
Docs MDX check passed (2 files, 531ms).

Parser proof with Date.now() fixed at 2026-06-15T00:00:00Z:

$ npx -y [email protected] --import tsx -e "import { parseAt } from './src/cli/cron-cli/shared.ts'; Date.now = () => Date.parse('2026-06-15T00:00:00Z'); const cases = { utcTime: parseAt('09:00'), utcTimeWithSeconds: parseAt('09:00:30'), shanghaiTime: parseAt('09:00', 'Asia/Shanghai'), invalidTimezone: parseAt('09:00', 'Not/AZone'), invalidHour: parseAt('24:00'), invalidMinute: parseAt('12:60'), plusDurationAccepted: parseAt('+20m') !== null, bareDurationAccepted: parseAt('20m') !== null }; console.log(JSON.stringify(cases, null, 2));"
{
  "utcTime": "2026-06-15T09:00:00.000Z",
  "utcTimeWithSeconds": "2026-06-15T09:00:30.000Z",
  "shanghaiTime": "2026-06-15T01:00:00.000Z",
  "invalidTimezone": null,
  "invalidHour": null,
  "invalidMinute": null,
  "plusDurationAccepted": true,
  "bareDurationAccepted": true
}

Real CLI proof using a dummy gateway URL so no job can be created:

$ OPENCLAW_GATEWAY_URL=ws://127.0.0.1:9/ws OPENCLAW_GATEWAY_TOKEN=proof-token node openclaw.mjs cron add --name codex-time-proof --at 09:00 --message "Time-only proof" --no-deliver --agent main --json
GatewayTransportError: gateway closed (1006 abnormal closure (no close frame)): no close reason
Gateway target: ws://127.0.0.1:9/ws
Source: env OPENCLAW_GATEWAY_URL

That command reaches the gateway path, proving 09:00 is accepted by --at parsing. The invalid time-only case still fails before any gateway call:

$ OPENCLAW_GATEWAY_URL=ws://127.0.0.1:9/ws OPENCLAW_GATEWAY_TOKEN=proof-token node openclaw.mjs cron add --name codex-time-proof --at 24:00 --message "Time-only proof" --no-deliver --agent main --json
Error: Invalid --at. Use an ISO timestamp, HH:MM time, or a duration like 20m.

The --tz time-only path also reaches the safe dummy gateway instead of failing parser validation:

$ OPENCLAW_GATEWAY_URL=ws://127.0.0.1:9/ws OPENCLAW_GATEWAY_TOKEN=proof-token node openclaw.mjs cron add --name codex-time-proof --at 09:00 --tz Asia/Shanghai --message "Time-only proof" --no-deliver --agent main --json
GatewayTransportError: gateway closed (1006 abnormal closure (no close frame)): no close reason
Gateway target: ws://127.0.0.1:9/ws
Source: env OPENCLAW_GATEWAY_URL

Covered cases include:

  • 09:00
  • 09:00:30
  • --tz Asia/Shanghai
  • invalid timezone returning null
  • 24:00, 12:60, 12:30:60
  • existing +30m and 30m duration behavior
  • help/docs discoverability for HH:MM[:SS]

Related

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

greptile-apps Bot commented Apr 22, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds support for bare HH:MM / HH:MM:SS strings in cron add --at, resolving them against today's date in the specified --tz (or UTC when no timezone is given). It also gracefully returns null instead of throwing for invalid IANA timezone strings and rejects out-of-range values. The implementation is focused, well-tested, and handles DST edge cases correctly by delegating through parseOffsetlessIsoDateTimeInTimeZone.

Confidence Score: 5/5

Safe to merge — implementation is correct, error handling is robust, and the test coverage targets all documented edge cases.

No P0 or P1 findings. The regex correctly avoids conflicts with existing formats (ISO datetimes, durations, epoch ms). Invalid timezones are handled at both getTodayDateInTimeZone and parseOffsetlessIsoDateTimeInTimeZone. DST gaps produce null consistently. All remaining observations are P2 at most.

No files require special attention.

Reviews (1): Last reviewed commit: "fix(cron): support time-only --at values..." | Re-trigger Greptile

Copy link
Copy Markdown
Contributor Author

Closing #59444 separately because that branch picked up unrelated workflow and repo-wide churn, which made review noisy and mixed the cron fix with unrelated changes.

#70046 is the clean respin for the intended scope only:

  • the cron add --at time-only fix
  • --tz support for time-only input
  • invalid-IANA-timezone handling
  • out-of-range time-only validation from review feedback
  • focused tests for the cron parser

Please use this PR for review and merge; it supersedes #59444.

@rrrrrredy

Copy link
Copy Markdown
Contributor Author

Status update as of 2026-04-23: this is the active clean respin for #59441, the issue/PR links are now corrected, and the current checks are green. If the scoped cron fix looks good, I would appreciate maintainer review on this version.

@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

@clawsweeper

clawsweeper Bot commented Apr 29, 2026

Copy link
Copy Markdown
Contributor

Thanks for the contribution. ClawSweeper proposes closing this for now: the implementation may be reasonable, but passing review and proof does not establish that OpenClaw should add this product surface.

Close as unconfirmed product direction: the patch is focused, well proven, and appears technically correct, but it adds a new public cron --at time-only grammar and "today in UTC or --tz" semantics without maintainer sponsorship.

Root-cause cluster
Relationship: canonical
Canonical: #70046
Summary: This PR is the active clean respin for the closed time-only cron scheduling report; related help-text and invalid-timestamp work are adjacent but do not own the remaining time-only grammar decision.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

This is a proposal only until the separate default-off apply policy is enabled and all live maintainer-signal checks pass. A maintainer can sponsor the direction, request a narrower version, or apply clawsweeper:human-review to keep it open.

Review details

Best possible solution:

A maintainer should explicitly sponsor the time-only cron grammar and its today/UTC/--tz semantics before this user-facing surface lands.

Do we have a high-confidence way to reproduce the issue?

Yes by source inspection: current parseAt has no time-only branch, so 09:00 falls through to absolute timestamp and duration parsing and returns null. I did not run a CLI repro because this cleanup review kept the checkout read-only.

Is this the best way to solve the issue?

Unclear as a product decision: the parser-layer implementation is clean and well scoped, but accepting bare HH:MM[:SS] adds a new public scheduling grammar with "today" semantics. The safer path is maintainer sponsorship before merge.

Security review:

Security review cleared: Security review cleared: the diff changes cron parser/help/tests and docs only, with no dependencies, workflows, secrets, downloads, or new code-execution path.

AGENTS.md: found and applied where relevant.

What I checked:

  • Repository policy read: Root AGENTS.md and docs/AGENTS.md were read fully; the review applied the guidance to treat public CLI/docs surface additions as product-sensitive and to inspect source, docs, tests, related items, and history before verdict. (AGENTS.md:1, 8ed6c78b7891)
  • Current main parser lacks time-only grammar: Current parseAt handles offset-less ISO datetime with tz, then absolute timestamps and durations; bare HH:MM has no supported branch and returns null. (src/cli/cron-cli/shared.ts:290, 8ed6c78b7891)
  • Current docs do not document HH:MM input: Current main documents --at <datetime> with offset-less datetime plus --tz semantics, not bare time-only HH:MM[:SS] values. Public docs: docs/cli/cron.md. (docs/cli/cron.md:134, 8ed6c78b7891)
  • Latest release has same ISO/duration contract: Tag v2026.6.11 has the same parseAt shape and the same --at <datetime> documentation, so the time-only behavior is not shipped. (src/cli/cron-cli/shared.ts:290, e085fa1a3ffd)
  • PR implementation adds new grammar: The PR head adds TIME_ONLY_RE, range validation, today-date derivation in UTC or the supplied IANA timezone, and routes the constructed value through the existing zoned datetime parser. (src/cli/cron-cli/shared.ts:283, 3574003cf6b5)
  • PR regression coverage is focused: The PR head adds parser tests for UTC time-only values, timezone resolution, invalid timezones, invalid offset-less ISO timezones, and out-of-range time-only fields. (src/cli/cron-cli/shared.test.ts:252, 3574003cf6b5)

Likely related people:

  • steipete: Authored the zoned datetime parser that parseAt delegates to for offset-less --at timezone resolution and appears repeatedly in cron parser/docs history. (role: adjacent parser owner; confidence: high; commits: 0857447a5d63, e28e52037955, 09cee2224939; files: src/infra/format-time/parse-offsetless-zoned-datetime.ts, src/cli/cron-cli/shared.ts, docs/cli/cron.md)
  • mushuiyu886: Authored the merged plus-duration support in the same one-shot parseAt branch that this PR preserves. (role: adjacent parser contributor; confidence: medium; commits: 9239f94e5bc9; files: src/cli/cron-cli/shared.ts, src/cli/cron-cli/shared.test.ts)
  • rrrrrredy: Authored the merged help-text PR that clarified --tz for offset-less --at values, which partially overlaps this PR's docs surface. (role: adjacent help-text contributor; confidence: medium; commits: a9bfdc2884e6; files: src/cli/cron-cli/register.cron-edit.ts, src/cli/cron-cli.test.ts)
  • Alix-007: Recently changed parseAbsoluteTimeMs, the lower absolute timestamp parser that current parseAt delegates to after the timezone branch. (role: adjacent lower-parser contributor; confidence: medium; commits: 4559a8d73655; files: src/cron/parse.ts, src/cron/parse.test.ts)

Codex review notes: model internal, reasoning high; reviewed against 8ed6c78b7891.

@h-mascot

Copy link
Copy Markdown
Contributor

Heads up from a live beta canary on OpenClaw 2026.5.18 / Raspberry Pi / Linux arm64.

This PR is about the cron add --at parser, so this may belong here rather than as a separate issue:

openclaw cron add --help currently says:

--at <when>  Run once at time (ISO with offset, or +duration). Use --tz for offset-less datetimes

But plus-prefixed duration is rejected:

openclaw cron add --name phase2c-plus-reject --at +20m --delete-after-run --session isolated --agent main --model litellm/gpt-5.5 --timeout-seconds 60 --message "Phase2 plus duration should parse" --no-deliver --json

Actual:

Error: Invalid --at. Use an ISO timestamp or a duration like 20m.

Bare duration works:

openclaw cron add --name phase2c-test-at --at 20m ...

So either the help should stop advertising +duration, or the parser should accept the documented +20m form. This is separate from the HH:MM/--tz case, but probably same parser/test area.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. labels May 20, 2026
@clawsweeper

clawsweeper Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat.

Where did the egg go?
  • The egg game starts only after the PR passes the real-behavior proof check.
  • Before that, no creature or rarity is rolled. The treat waits for real proof.
  • This is still just collectible flavor: proof affects review readiness, not creature quality.

@openclaw-barnacle openclaw-barnacle Bot added the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label May 20, 2026
@RomneyDa

Copy link
Copy Markdown
Member

Heads up: this PR needs to be updated against current main before the new required Dependency Guard check can pass.

@openclaw-barnacle

Copy link
Copy Markdown

This pull request has been automatically marked as stale due to inactivity.
Please add updates or it will be closed.

@openclaw-barnacle openclaw-barnacle Bot added the stale Marked as stale due to inactivity label Jun 14, 2026
@rrrrrredy
rrrrrredy force-pushed the fix/cron-at-time-only-tz-respin branch from 05c7d3e to 1ea25f1 Compare June 15, 2026 03:32
@rrrrrredy

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@openclaw-barnacle openclaw-barnacle Bot removed the stale Marked as stale due to inactivity label Jun 15, 2026
@rrrrrredy

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 15, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label Jun 15, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 15, 2026
@rrrrrredy

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. proof: sufficient ClawSweeper judged the real behavior proof convincing. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jun 15, 2026
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. labels Jun 18, 2026
@rrrrrredy
rrrrrredy force-pushed the fix/cron-at-time-only-tz-respin branch from b3ae615 to f920d56 Compare June 22, 2026 02:09
@rrrrrredy

Copy link
Copy Markdown
Contributor Author

Resolved the current-main conflict by rebasing this branch onto upstream/main at 84ccba6b32 and pushed the refreshed head f920d56466.

Focused verification on Node.js 24.13.0:

$ npx -y [email protected] scripts/test-projects.mjs src/cli/cron-cli/shared.test.ts src/cli/cron-cli.test.ts
Test Files  2 passed (2)
Tests       126 passed (126)
[test] passed 1 Vitest shard

$ npx -y [email protected] node_modules/oxfmt/bin/oxfmt --check --threads=1 --config .oxfmtrc.jsonc docs/automation/cron-jobs.md docs/cli/cron.md src/cli/cron-cli/register.cron-add.ts src/cli/cron-cli/register.cron-edit.ts src/cli/cron-cli/schedule-options.ts src/cli/cron-cli/shared.ts src/cli/cron-cli/shared.test.ts src/cli/cron-cli.test.ts
All matched files use the correct format.

$ npx -y [email protected] scripts/check-docs-mdx.mjs docs/automation/cron-jobs.md docs/cli/cron.md
Docs MDX check passed (2 files, 154ms).

$ npx -y [email protected] node_modules/oxlint/bin/oxlint src/cli/cron-cli/shared.ts src/cli/cron-cli/schedule-options.ts src/cli/cron-cli/register.cron-add.ts src/cli/cron-cli/register.cron-edit.ts src/cli/cron-cli/shared.test.ts src/cli/cron-cli.test.ts

GitHub now reports the refreshed branch as mergeable; hosted checks are running on the new head.

@rrrrrredy
rrrrrredy force-pushed the fix/cron-at-time-only-tz-respin branch from f920d56 to 5694c53 Compare June 22, 2026 02:14
@rrrrrredy

Copy link
Copy Markdown
Contributor Author

Updated again after main advanced, rebasing this branch onto upstream/main at e913e0739d and pushing refreshed head 5694c53428.

Focused verification on Node.js 24.13.0 still passes:

$ npx -y [email protected] scripts/test-projects.mjs src/cli/cron-cli/shared.test.ts src/cli/cron-cli.test.ts
Test Files  2 passed (2)
Tests       126 passed (126)
[test] passed 1 Vitest shard

$ npx -y [email protected] node_modules/oxfmt/bin/oxfmt --check --threads=1 --config .oxfmtrc.jsonc docs/automation/cron-jobs.md docs/cli/cron.md src/cli/cron-cli/register.cron-add.ts src/cli/cron-cli/register.cron-edit.ts src/cli/cron-cli/schedule-options.ts src/cli/cron-cli/shared.ts src/cli/cron-cli/shared.test.ts src/cli/cron-cli.test.ts
All matched files use the correct format.

$ npx -y [email protected] scripts/check-docs-mdx.mjs docs/automation/cron-jobs.md docs/cli/cron.md
Docs MDX check passed (2 files, 225ms).

$ npx -y [email protected] node_modules/oxlint/bin/oxlint src/cli/cron-cli/shared.ts src/cli/cron-cli/schedule-options.ts src/cli/cron-cli/register.cron-add.ts src/cli/cron-cli/register.cron-edit.ts src/cli/cron-cli/shared.test.ts src/cli/cron-cli.test.ts

The prior failed CI jobs were outside this PR's cron diff (check-dependencies on src/plugins/contracts/speech-vitest-registry.ts, plus unrelated model fallback/plugin-sdk tests) and came from the intermediate synthetic merge while main moved. This head is refreshed onto the latest main; hosted checks are running again.

@clawsweeper clawsweeper Bot added the merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. label Jun 22, 2026
@yun520-1

Copy link
Copy Markdown

cron时间格式解析问题,看起来是时区处理+时间字符串解析的边界情况。这种"配置输入解析"正是心虫逻辑验证层的典型场景。

心虫(HeartFlow)的**决策路由(Decision Router)**可以:

  • 在cron任务触发前验证时间参数的合法性
  • 如果时间解析失败,自动尝试3种备用解析格式
  • 记录解析失败的模式到Q-table,下次同类输入直接走正确路径

心虫已经以MCP Server形式在Hermes Agent上运行,验证了跨Agent框架的兼容性。我也想找Agent框架/认知引擎方向的开发岗位,这是我的作品:

仓库:github.com/yun520-1/mark-heartflow-skill

@rrrrrredy
rrrrrredy force-pushed the fix/cron-at-time-only-tz-respin branch from 5694c53 to 3574003 Compare June 23, 2026 03:34
@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jun 23, 2026
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. P2 Normal backlog priority with limited blast radius. labels Jun 29, 2026
@steipete steipete closed this Jul 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli CLI command changes docs Improvements or additions to documentation merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

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

5 participants