Files
Nexus/docs/audit/2026-06-08-schedule-cycle-picker.md
T
Nexus Agent 08a0157c95 feat: 调度表单重构、登录门控、批量任务与页面缓存对齐
调度页执行周期可视化/单次执行/分类选机/推送源对齐;登录 IP 门控与无缝导航;
服务器批量后台任务、执行记录、凭据合并、各页激活刷新与错误提示修复。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 11:17:21 +08:00

2.6 KiB
Raw Blame History

审计 — 调度执行周期可视化(2026-06-08)

Changelog: docs/changelog/2026-06-08-schedule-cycle-picker.md
设计: docs/design/specs/2026-06-08-schedule-cycle-picker-design.md

审计范围

模块 文件
周期工具 frontend/src/utils/scheduleCycle.ts
选择器 frontend/src/components/schedules/ScheduleCyclePicker.vue
调度页 frontend/src/pages/SchedulesPage.vue
后端镜像 server/utils/schedule_cycle.py
单测 tests/test_schedule_cycle.py

安全

结论
无新 API PASS — 仍提交 cron_expr 字符串
Cron 注入 PASS — 白名单类型 + 数值 clamp;custom 仅 5 字段字符集
鉴权 PASS — 调度 CRUD 仍走既有 JWT

Step 3

H 规则 结论
H1 不改 DB/runner PASS
H2 宝塔周期对齐 PASS — day/day-n/hour/hour-n/minute-n/week/month
H3 旧 Cron 可编辑 PASS — parseCronToCycle + custom 回退
H4 秒级诚实披露 PASS — N≥60,折算分钟步进 + UI hint
H5 列表可读 PASS — formatCycleLabel

Closure

H 判定
H1H5 PASS

DoD

  • pytest tests/test_schedule_cycle.py tests/test_schedule_next_run.py — 21 passed
  • cd frontend && npm run build — OK
  • changelog + 设计文档
  • 生产热更新 + 容器内 bundle 含「执行周期」
  • 用户浏览器终验

代码审计(2026-06-08 补审)

此前仅跑门控 + 写文档;以下为逐文件审读结论。

PASS

说明
宝塔对齐 buildCronFromCycle 与 aaPanel GetCrondCycle 一致
Runner 兼容 仍写 5 字段 cron_exprschedule_runner 无需改动
数值 clamp 时/分/interval 前后端均有边界
旧数据 无法反解析 → custom 保留原 Cron
安全 无新 APIcustom 模式字符集校验;JWT 不变

发现问题(已修复 2026-06-08

严重度 问题 处理
「每 N 秒」无法 roundtrip 已移除 second-n;最短 1 分钟 minute-n

审读文件

scheduleCycle.ts · ScheduleCyclePicker.vue · SchedulesPage.vue · schedule_cycle.py · test_schedule_cycle.py · schedule_runner.py(未改,兼容性确认)

Gate 7 说明

本变更仅前端 + 工具/单测。HEAD 已提交 sort 修复交叉引用:useServerPagination.tsDashboardPage.vueServersPage.vueservers.pyserver_list_sort.pyserver_repo.pytest_server_list_sort.pyweb/app/index.html(见 docs/audit/2026-06-08-servers-live-sort-fix.md)。