3.3 KiB
3.3 KiB
BUG 专项逐行走读 — Batch 2(2026-06-04)
标准: docs/project/line-walk-audit-standard.md · 八类仅列 BUG
范围(5 文件,全文 Read)
| 文件 | N | Read |
|---|---|---|
server/background/schedule_runner.py |
231 | 1–231 |
server/application/services/auth_service.py |
619 | login/refresh/TOTP 段 |
server/application/services/sync_engine_v2.py |
529 | sync_files + _rsync_push |
server/infrastructure/redis/script_execution_store.py |
423 | live/flush/stuck 段 |
frontend/src/composables/terminal/useTerminalSessions.ts |
750 | connect/reconnect/WebSSH |
Step 3 规则扫描(BUG 相关)
| 文件 | 命中 |
|---|---|
| schedule_runner.py | once 执行前 enabled=False + 失败不回滚 |
| auth_service.py | TOTP 未提交是否计失败、refresh 版本 |
| sync_engine_v2.py | gather(return_exceptions=True) 未捕获异常计数 |
| script_execution_store.py | stuck/pending、Redis→MySQL 一致性 |
| useTerminalSessions.ts | WebSocket token、重连风暴 |
Closure 表(BUG)
| 文件 | 行号 | 判定 | 严重度 | 理由 |
|---|---|---|---|---|
| schedule_runner.py | 125-217 | FINDING | P1 | run_mode=once 执行前禁用;失败时仅 cron 回滚 last_run_at,once 永久失活 |
| auth_service.py | 154-156 | SAFE | — | totp_required 不计入暴破次数,避免泄露账户存在性前锁定 |
| auth_service.py | 228-237 | SAFE | — | refresh 版本不匹配只拒本 token,不误伤多设备 |
| sync_engine_v2.py | 241-242 | RISK | P2 | gather(..., return_exceptions=True) 若 _sync_one 未捕获异常,completed+failed 可能小于 total |
| script_execution_store.py | 300-312 | SAFE | — | stuck 检测仅 pending+started_at,与 callback 聚合一致 |
| script_execution_store.py | 65-67 | SAFE | — | unpack_results_blob 对解析 dict 局部 pop _meta |
| useTerminalSessions.ts | 277-293 | SAFE | — | 连接前 POST /auth/webssh-token,WS URL 带短期 token |
| useTerminalSessions.ts | 386-391 | SAFE | — | 指数退避重连 capped 30s |
FINDING 列表(8 字段)
BUG-06-04-04 · P1 · schedule_runner.py:212-217
现象:一次性调度在触发前写入 last_run_at 且 enabled=False;执行失败时旧逻辑仅对 cron 回滚 last_run_at,once 任务静默失败且无法重试。
修复:rollback_schedule_after_failed_run() — 失败时恢复 last_run_at,once 额外 enabled=True。
验证:tests/test_schedule_runner_once.py
Step 7 统计
schedule_runner.py 1 FINDING(已修)
auth_service.py 0
sync_engine_v2.py 0(1 项 P2 观察,未改)
script_execution_store.py 0
useTerminalSessions.ts 0
Step 8 DoD
- 5 文件 Read 覆盖
- Closure 全表
- FINDING 含
文件:行号 - P1 已落地修复 + pytest
验证
ruff check server/background/schedule_runner.py
pytest tests/test_schedule_runner_once.py tests/ -q --tb=no
Changelog: docs/changelog/2026-06-04-schedule-once-rollback.md
下一批(BUG)
server/api/files_browse.py/retry_runner.pyfrontend/src/pages/DashboardPage.vue(stats vs Redis 在线数)sync_engine_v2.pyP2:gather异常与计数对齐(若改需单测)