# Phase 2d 逐行走读 — `main.py` + `config.py` + `background/`（完成）

**标准**: `docs/project/line-walk-audit-standard.md`  
**日期**: 2026-05-22

---

## 走读签字

| 项 | 值 |
|----|-----|
| 计划文件数 | 6 |
| 完成文件数 | 6 |
| 新增 FINDING | 4 |

---

## 文件清单

| 文件 | N | Read | H | Closure | 状态 |
|------|---|------|---|---------|------|
| `server/main.py` | 372 | 1–372 | 3 | 3 | 逐行完成 ✓ |
| `server/config.py` | 147 | 1–147 | 2 | 2 | 逐行完成 ✓ |
| `background/heartbeat_flush.py` | 98 | 1–98 | 2 | 2 | 逐行完成 ✓ |
| `background/self_monitor.py` | 91 | 1–91 | 2 | 2 | 逐行完成 ✓ |
| `background/schedule_runner.py` | 138 | 1–138 | 1 | 1 | 逐行完成 ✓ |
| `background/retry_runner.py` | 96 | 1–96 | 1 | 1 | 逐行完成 ✓ |

---

## Findings — 批次 1

| ID | 文件:行 | 类 | 度 | 描述 |
|----|---------|----|----|------|
| F2d-01 | `config.py`（缺字段） | BUG | P2 | `agent_url.py` 读 `settings.API_BASE_URL`，Settings 原未声明 → 恒 http；已补字段 |
| F2d-02 | `main.py:277-295` | EXT | P2 | 无全局 JWT 中间件，依赖各路由 `Depends`；install 模式外仍注册全路由 |
| F2d-03 | `main.py:287-288` | RISK | P2 | 安装模式下 `/ws/` 可连（无配置时 WebSSH/告警 WS 仍可达） |
| F2d-04 | `self_monitor.py:72` | RISK | P2 | MySQL 异常文本写入 Telegram，可能泄露连接串片段 |

---

## Closure — 批次 1

### `server/main.py`

| 行号 | 规则 | 判定 | 严重度 | 理由 |
|------|------|------|--------|------|
| 137-160 | PY-09 | SAFE | — | DbSessionMiddleware 每请求一开一关 |
| 273-295 | PY-05 | FINDING | P2 | F2d-02/03 InstallModeMiddleware |
| 328-334 | PY-05 | SAFE | — | CORS 非 `*` |
| 339-366 | PY-05 | SAFE | — | 路由注册；鉴权在子路由 |

### `server/config.py`

| 行号 | 规则 | 判定 | 严重度 | 理由 |
|------|------|------|--------|------|
| 49-51 | PY-06 | SAFE | — | 不可变密钥不进 DB_OVERRIDE_MAP |
| 82-94 | PY-06 | SAFE | — | DB 不可覆盖 SECRET/API_KEY 等 |
| API_BASE_URL | PY-09 | FINDING→FIX | P2 | F2d-01 已补 `API_BASE_URL` 字段 |

### `background/heartbeat_flush.py`

| 行号 | 规则 | 判定 | 理由 |
|------|------|------|------|
| 78-87 | PY-04 | SAFE | ORM update 绑定 server_id |
| 44 | PY-09 | SAFE | redis.scan 分批 |

### `background/self_monitor.py`

| 行号 | 规则 | 判定 | 理由 |
|------|------|------|------|
| 68 | PY-04 | SAFE | `SELECT 1` |
| 72 | PY-01 | FINDING | P2 F2d-04 错误信息外传 |

### `background/schedule_runner.py`

| 行号 | 规则 | 判定 | 理由 |
|------|------|------|------|
| 112-118 | PY-03 | SAFE | 后台任务调用 SyncEngineV2，非 HTTP 入口 |

---

## 入口表（本批）

| 组件 | 鉴权 |
|------|------|
| `main.py` HTTP 路由 | 子路由 JWT / API Key |
| `InstallModeMiddleware` | 无 .env 时仅 install+静态+health |
| 后台循环 | 无（进程内信任） |

---

### `background/retry_runner.py`

| 行号 | 规则 | 判定 | 理由 |
|------|------|------|------|
| 57-63 | PY-03 | SAFE | 指数退避重试 sync_files，进程内 |

---

## 下一批

**Phase 2e**: `web/app/*.{html,js}`（前端 FE-01–06）
