# BUG 专项逐行走读 — Batch 1(2026-06-04) **标准**: `docs/project/line-walk-audit-standard.md` · 八类仅列 **BUG** ## 范围(5 文件,全文 Read) | 文件 | N | Read | |------|---|------| | `server/api/install.py` | 719 | 1–719 | | `web/app/install.html` | 720 | createAdmin/lock 段 + init | | `server/application/services/script_job_callback.py` | 110 | 1–110 | | `server/api/agent.py` | 360 | 1–360 | | `server/api/servers.py` | 1733 | stats 228–280 + list 165–220 | --- ## Step 3 规则扫描(BUG 相关) | 文件 | 命中 | |------|------| | install.py | 守卫分支、lock/create-admin 时序 | | install.html | 未检查 lock 响应 | | script_job_callback.py | `_aggregate_execution_status` 空列表 | | agent.py | 丢弃未知 server、指标解析 | | servers.py | stats `offline = total - online` | --- ## Closure 表(BUG) | 文件 | 行号 | 判定 | 严重度 | 理由 | |------|------|------|--------|------| | install.html | 691-694 | **FINDING** | P1 | create-admin 成功后未检查 `/lock`;失败仍进 step5 | | install.py | 648 | **FINDING** | P1 | create-admin 与 lock 非原子;锁定前 install API 仍可被未认证调用 | | script_job_callback.py | 17-36 | **FINDING** | P2 | `server_ids==[]` 时直接 `return "completed"`,忽略 results 中 pending | | install.py | 509-526 | SAFE | — | state 不写 db_pass(有意);刷新 step4 需重填密码属 UX | | agent.py | 154-180 | SAFE | — | 无 server_id / 未知 server 丢弃,设计如此 | | agent.py | 86-94 | SAFE | — | 非数字指标跳过 | | servers.py | 245-279 | RISK/BUG | P2 | `offline=total-online` 与列表 Redis 覆盖逻辑在「从未装 Agent」服务器上可能偏差;非回归 | | servers.py | 205-212 | SAFE | — | is_online 过滤后重算 total | --- ## FINDING 列表(8 字段) ### BUG-06-04-01 · P1 · install.html:691-694 **现象**:管理员创建成功但 lock 503/400 时 UI 仍显示「安装完成」。 **修复**:检查 lock 响应;`create-admin` 返回 `locked:true` 时跳过二次 lock。 ### BUG-06-04-02 · P1 · install.py:648 **现象**:create-admin 完成到 lock 之间,未认证客户端可再次 `create-admin`(ON DUPLICATE 改密)。 **修复**:`create-admin` 末尾 `_finalize_install_lock()`;`lock` 幂等 `already_locked`。 ### BUG-06-04-03 · P2 · script_job_callback.py:32-33 **现象**:`server_ids` JSON 损坏为空列表时,误标 `completed`。 **修复**:空列表时扫描 results 是否仍有 `phase=pending`。 --- ## Step 7 统计 ``` install.py 2 FINDING(已修) install.html 1 FINDING(已修) script_job_callback.py 1 FINDING(已修) agent.py 0 servers.py 0(1 项 P2 观察) ``` ## Step 8 DoD - [x] 5 文件 Read 覆盖 - [x] Closure 全表 - [x] FINDING 含 `文件:行号` - [x] 3 项 P1/P2 已落地修复 ## 验证 ```bash ruff check server/api/install.py server/application/services/script_job_callback.py pytest tests/test_security_unit.py tests/ -q --tb=no ``` Changelog: `docs/changelog/2026-06-04-install-lock-atomic.md` ## 下一批(BUG) - `server/application/services/sync_engine_v2.py` - `server/api/auth_service.py` - `server/background/schedule_runner.py` - `frontend/src/composables/terminal/useTerminalSessions.ts` - `server/infrastructure/redis/script_execution_store.py`