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

75 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 审计 — 调度执行周期可视化(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 — 白名单类型 + 数值 clampcustom 仅 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
- [x] `pytest tests/test_schedule_cycle.py tests/test_schedule_next_run.py` — 21 passed
- [x] `cd frontend && npm run build` — OK
- [x] changelog + 设计文档
- [x] 生产热更新 + 容器内 bundle 含「执行周期」
- [ ] 用户浏览器终验
## 代码审计(2026-06-08 补审)
此前仅跑门控 + 写文档;以下为逐文件审读结论。
### PASS
| 项 | 说明 |
|----|------|
| 宝塔对齐 | `buildCronFromCycle` 与 aaPanel `GetCrondCycle` 一致 |
| Runner 兼容 | 仍写 5 字段 `cron_expr``schedule_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.ts``DashboardPage.vue``ServersPage.vue``servers.py``server_list_sort.py``server_repo.py``test_server_list_sort.py``web/app/index.html`(见 `docs/audit/2026-06-08-servers-live-sort-fix.md`)。