# Phase 2i 逐行走读 — 脚本执行支撑层 + main 增量

**标准**: `docs/project/line-walk-audit-standard.md`  
**日期**: 2026-05-22  
**范围**: `script_repo.py`（扩容）、`schemas.py`（执行模型）、`agent_url.py`、`repositories/__init__.py`、`main.py`（script flush 增量）

---

## 走读签字

| 项 | 值 |
|----|-----|
| 计划文件数 | 5 |
| 完成文件数 | 5 |
| 新增 FINDING | 2 |
| 2c/2d VERIFY | `agent_url` 仍 12 行；`main` 372→378 行仅增 script flush |

---

## 文件清单

| 文件 | N | Read | H | Closure | 状态 |
|------|---|------|---|---------|------|
| `infrastructure/database/script_repo.py` | 94 | 1–94 | 1 | 1 | 逐行完成 ✓ |
| `infrastructure/agent_url.py` | 12 | 1–12 | 1 | 1 | 逐行完成 ✓ |
| `domain/repositories/__init__.py` | 126 | 1–126 | 0 | 0 | 逐行完成 ✓ |
| `api/schemas.py` | 246 | 1–246 | 2 | 2 | 逐行完成 ✓ |
| `main.py`（增量） | 378 | 1–80,180–280,330–378 + 2d 已读中段 | 2 | 2 | 增量完成 ✓ |

---

## Findings

| ID | 文件:行 | 类 | 度 | 描述 | 修复建议 |
|----|---------|----|----|------|----------|
| F2i-01 | `script_repo.py:83-94` | BUG | P2 | `update_status` 在 execution 不存在时返回 `None`，`flush_to_mysql` 可能 AttributeError | 无记录时 raise 或返回 Optional 并由调用方处理 |
| F2i-02 | `schemas.py:24-27` | OPT | P2 | `AgentExec` 模型仍存在，中心 `/api/agent/exec` 已删 | 删除死代码或标 deprecated |

**延续（不新编号）**: F2h-01 / F2g-05 `ScriptExecute` 无 `credential_id`（schemas:141-146）。

---

## Closure 全表

### `script_repo.py`

| 文件 | 行号 | 规则 | 判定 | 严重度 | 理由 |
|------|------|------|------|--------|------|
| script_repo.py | 64-81 | PY-04 | SAFE | — | SQLAlchemy 参数化；`status` 来自枚举式过滤 |
| script_repo.py | 83-94 | PY-04 | FINDING | P2 | F2i-01：`get` 失败仍 `return execution`（None） |

### `agent_url.py`

| 文件 | 行号 | 规则 | 判定 | 严重度 | 理由 |
|------|------|------|------|--------|------|
| agent_url.py | 8-11 | PY-01 | RISK | — | scheme 绑定 `API_BASE_URL`；无 HTTPS 配置则 http（已知 F2b-07 缓解） |

### `repositories/__init__.py`

规则零命中。`ScriptExecutionRepository.list_recent` 与 impl 一致。

### `schemas.py`

| 文件 | 行号 | 规则 | 判定 | 严重度 | 理由 |
|------|------|------|------|--------|------|
| schemas.py | 141-146 | PY-05 | FINDING | P2 | 无 credential_id（F2h-01） |
| schemas.py | 159-166 | PY-05 | SAFE | — | callback 字段长度限制 |
| schemas.py | 24-27 | — | FINDING | P2 | F2i-02 死模型 |

### `main.py`（增量）

| 文件 | 行号 | 规则 | 判定 | 严重度 | 理由 |
|------|------|------|------|--------|------|
| main.py | 218-226 | — | SAFE | — | script flush 仅 primary worker，避免重复刷盘 |
| main.py | 351 | PY-05 | SAFE | — | scripts_router 正常注册；JWT 在路由 Depends |

**2d VERIFY**: F2d-02/03 行号仍成立（无全局 JWT；install 模式 WS）。

---

## 报告索引

| 批次 | 路径 |
|------|------|
| 2i | 本文件 |
| 2j | `audit-phase-2j-line-walk.md` |
| 闭环 | `audit-phase-2-walk-closure.md` |
