openclaw - ✅(Solved) Fix Control UI cron display: `*/6` intervals shown as `3:00` instead of "every 6 hours" [2 pull requests, 1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#65135Fetched 2026-04-12 13:25:25
View on GitHub
Comments
1
Participants
2
Timeline
4
Reactions
0
Author
Timeline (top)
cross-referenced ×2commented ×1referenced ×1

Fix Action

Fixed

PR fix notes

PR #65172: fix(ui): stop misparsing cron-like at schedule strings

Description (problem / solution / changelog)

Summary

  • stop the Cron Jobs presenter from feeding arbitrary strings into
  • only format true absolute timestamps for schedules, so cron-like text such as stays visible as-is
  • add a regression test covering the cron-like string case plus the normal ISO timestamp case

Problem

The Control UI schedule presenter treated any string as a candidate date. JavaScript accepts some cron-looking strings like as dates, which caused the UI to render a bogus local time such as instead of the original schedule text.

What changed

  • added a small guarded parser in that only accepts numeric timestamps or ISO-like absolute date strings
  • left non-absolute strings untouched so they render literally
  • added to lock in the regression

Validation

 RUN  v4.1.0 /root/.openclaw/dev/openclaw

Closes #65135

Changed files

  • docs/automation/cron-jobs.md (modified, +1/-0)
  • docs/cli/cron.md (modified, +2/-0)
  • src/cron/isolated-agent.direct-delivery-forum-topics.test.ts (modified, +42/-0)
  • src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts (modified, +55/-0)
  • src/cron/isolated-agent/delivery-dispatch.ts (modified, +58/-4)
  • ui/src/ui/presenter.test.ts (added, +32/-0)
  • ui/src/ui/presenter.ts (modified, +28/-1)

PR #65199: fix(ui): humanize cron expressions in dreaming phase and cron job displays

Description (problem / solution / changelog)

Summary

  • Fixes #65135 — the Dreaming panel showed only the next-run timestamp (e.g. "3:00") for all sleep phases, making them indistinguishable when schedules happened to share the same next-run time
  • Adds describeCronExpression() utility that converts common 5-field cron patterns to human-readable text ("Every 6 hours", "Daily at 3:00 AM", "Weekly Sun at 5:00 AM"), with graceful fallback to the raw expression for exotic patterns
  • Updates the Cron Jobs panel to also show humanized descriptions instead of "Cron 0 */6 * * *"

Before: All three dreaming phases display "3:00" (the next-run timestamp), regardless of their actual schedule.

After: Phases display "Every 6 hours · next 3:00 AM", "Daily at 3:00 AM · next 3:00 AM", "Weekly Sun at 5:00 AM · next 5:00 AM" — clearly distinguishable.

Test plan

  • pnpm build passes
  • 130 relevant tests pass
  • New test cases cover: every-N-minutes, every-N-hours, hourly, daily, weekly, day=7 Sunday alias, */0 fallback, complex expression fallback, empty input
  • Visual check: Dreaming tab shows distinct schedule descriptions per phase
  • Visual check: Cron Jobs panel shows humanized schedule for cron-type jobs

Note: screenshots not included — the change affects rendered text content only (no layout or style changes). Happy to add before/after screenshots if requested.

AI disclosure

This PR was AI-assisted (Claude). Code has been reviewed for correctness, edge cases, and adherence to project conventions (American English, single-concern PR, tests included).

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.6 [email protected]

Changed files

  • ui/src/ui/format.test.ts (modified, +67/-1)
  • ui/src/ui/format.ts (modified, +86/-0)
  • ui/src/ui/presenter.ts (modified, +4/-1)
  • ui/src/ui/views/dreaming.ts (modified, +18/-6)

Code Example

[plugins] memory-core-dreaming: created "Memory Dreaming - Light" (0 */6 * * * @ Asia/Shanghai)
[plugins] memory-core-dreaming: created "Memory Dreaming - Deep" (0 3 * * * @ Asia/Shanghai)
[plugins] memory-core-dreaming: created "Memory Dreaming - REM" (0 5 * * 0 @ Asia/Shanghai)
RAW_BUFFERClick to expand / collapse

Bug Description

In the Control UI → Automation → Cron Jobs panel, the "Memory Dreaming - Light" cron job shows "3:00" for all three phases, but the actual schedule expressions are:

  • Light: 0 */6 * * * (every 6 hours — e.g., 0:00, 6:00, 12:00, 18:00)
  • Deep: 0 3 * * * (daily 3:00 AM)
  • REM: 0 5 * * 0 (weekly Sunday 5:00 AM)

Gateway logs confirm the correct expressions are stored and executed:

[plugins] memory-core-dreaming: created "Memory Dreaming - Light" (0 */6 * * * @ Asia/Shanghai)
[plugins] memory-core-dreaming: created "Memory Dreaming - Deep" (0 3 * * * @ Asia/Shanghai)
[plugins] memory-core-dreaming: created "Memory Dreaming - REM" (0 5 * * 0 @ Asia/Shanghai)

The display bug is in the Control UI cron expression renderer — it appears to treat */6 as a fixed minute value (00) at hour 3, instead of "every 6 hours."

Environment

  • OpenClaw: 2026.4.11
  • Node: macOS
  • Control UI: web-based dashboard

Expected vs Actual

  • Expected: "Every 6 hours" or display the raw expression 0 */6 * * *
  • Actual: "3:00"

Reproduction

  1. Install memory-core-dreaming plugin
  2. Observe cron jobs in Control UI → Automation → Cron Jobs
  3. All three Dreaming phases show "3:00" regardless of their actual schedule

extent analysis

TL;DR

Update the Control UI cron expression renderer to correctly handle interval expressions like */6 to display the schedule as "Every 6 hours" instead of a fixed time.

Guidance

  • Review the cron expression rendering logic in the Control UI to identify why */6 is being misinterpreted as a fixed minute value at hour 3.
  • Consider adding a special case to handle interval expressions (*/n) and display them as "Every n hours" or similar.
  • Verify the fix by checking the display of the "Memory Dreaming - Light" cron job in the Control UI after updating the renderer.
  • Test other cron jobs with different interval expressions to ensure the fix is robust.

Example

No code snippet is provided as the issue does not include specific code details, but the fix would involve modifying the cron expression rendering function to correctly handle interval expressions.

Notes

The fix may require updates to the Control UI's cron expression parsing and rendering logic, and may involve adding special cases for different types of cron expressions.

Recommendation

Apply a workaround by displaying the raw cron expression (0 */6 * * *) for the "Memory Dreaming - Light" job until the Control UI cron expression renderer can be updated to correctly handle interval expressions.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING