Skip to content

fix(dashboard): 修复定时任务编辑状态回填异常 - #770

Merged
deepcoldy merged 1 commit into
deepcoldy:masterfrom
darylchen97:fix/dashboard-schedule-edit-state
Aug 7, 2026
Merged

fix(dashboard): 修复定时任务编辑状态回填异常#770
deepcoldy merged 1 commit into
deepcoldy:masterfrom
darylchen97:fix/dashboard-schedule-edit-state

Conversation

@darylchen97

Copy link
Copy Markdown
Contributor

改了什么

  • 在 dashboard schedule 行数据中补回原始 schedule 字段,让编辑弹窗的「调度规则」输入框能正确回填。
  • 将 schedule 更新时的持久化 patch 与 dashboard 事件 patch 分离:关闭静默时,持久化仍按既有兼容逻辑清理 silent 字段,但 schedule.updated 事件显式发送 silent:false
  • 补充回归测试,覆盖:
    • GET /api/schedules 返回的行数据包含原始 schedule
    • silent:true 切到 false 时,dashboard cache 能收到可序列化的 silent:false

为什么

定时任务编辑弹窗依赖 editing.schedule 初始化「调度规则」输入框,但后端返回给 dashboard 的 schedule row 只有 parsed.display,没有原始 schedule 字段,导致弹窗里该输入框为空。

另一个同链路问题是:silent:false 在持久化层会被规范化为字段缺失。之前同一个 patch 直接发给 dashboard,经过 SSE/JSON 后 silent: undefined 被丢弃,前端 cache 无法清掉旧的 silent:true,表现为编辑保存后静默状态仍显示开启。

影响面

  • 仅影响 dashboard 定时任务编辑页的数据回填和编辑后的实时状态同步。
  • 不改变 schedules.json 的持久化格式。
  • 不影响任务实际调度、执行位置或静默执行语义。

验证

  • pnpm vitest run test/scheduler-toggle-delivery.test.ts 通过。
  • pnpm vitest run test/dashboard-ipc.test.ts -- -t "includes raw schedule" 通过。
  • pnpm build 通过。
  • live dashboard API 临时任务验证通过:silent:true -> false -> true 均能在 dashboard 聚合列表即时反映;临时任务已删除。
  • 已用当前 checkout 重启 live botmux,并确认 botmux-0/1/2botmux-dashboard 全部 online。

修复 dashboard 定时任务编辑弹窗的状态回填问题:
- schedule row 返回原始 schedule 字段,保证调度规则输入框可回填;
- schedule.updated 事件在关闭静默时显式带 silent:false,避免 SSE/JSON 丢弃 undefined 后前端缓存保留旧值。

Co-authored-by: TRAE CLI <noreply@bytedance.com>
@darylchen97
darylchen97 requested a review from deepcoldy as a code owner August 6, 2026 13:33

@deepcoldy deepcoldy left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

结论:通过,未发现阻塞项。

核对结果:

  • ScheduleRow.schedule 取自持久化任务的原始表达式,composeScheduleRow 统一覆盖 GET 列表、POST/PATCH 响应和 schedule.created 事件,因此刷新前后编辑都能正确回填。
  • 持久化 patch 与事件 patch 的拆分符合语义:关闭静默时落盘仍清理字段,事件显式发送 silent:false;开启时发送 true;未修改静默时事件不携带该字段,不会误清状态。
  • 改动不影响调度计算、执行位置、Lark 卡片 DTO 或 schedules.json 格式。

实际验证:

  • pnpm build:通过。
  • pnpm vitest run test/scheduler-toggle-delivery.test.ts test/dashboard-ipc.test.ts:124/124 通过。
  • pnpm test:13068 个测试通过、1 个无关套件在并发全量运行时 beforeAll 超时;单独重跑 test/group-join-shared-routing.test.ts 为 14/14 通过。
  • git diff --check:通过。

非阻塞观察:修改调度后若 computeNextRun() 返回空,既有 nextRunAt: undefined 仍会在 SSE 序列化时丢键,缓存可能暂留旧值。该问题早于本改动,刷新可自愈,建议单独修复,不要求本 PR 扩大范围。

@deepcoldy
deepcoldy merged commit 7b26ad4 into deepcoldy:master Aug 7, 2026
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

🚀 Released in v3.10.0

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants