# 前端 14 页深审 — Batch 2/3（Scripts / Credentials / Schedules / Retries / Commands）

**日期**: 2026-06-04  
**标准**: 8 步逐行

## 登记

| # | 文件 | 行数 N | Read 范围 |
|---|------|--------|-----------|
| 1 | `frontend/src/pages/ScriptsPage.vue` | 535 | 1–535 全文 |
| 2 | `frontend/src/pages/CredentialsPage.vue` | 400 | 1–400 全文 |
| 3 | `frontend/src/pages/SchedulesPage.vue` | 295 | 1–295 全文 |
| 4 | `frontend/src/pages/RetriesPage.vue` | 191 | 1–191 全文 |
| 5 | `frontend/src/pages/CommandsPage.vue` | 168 | 1–168 全文 |

## Step 3 — 逐文件 H

### ScriptsPage.vue (535)

| H | 行号 | 规则 |
|---|------|------|
| H1 | 358-390 | CRUD /scripts JWT |
| H2 | 415-419 | exec script_id + server_ids |
| H3 | 463-467 | quick command exec |
| H4 | 527-528 | poll timer cleanup |

### CredentialsPage.vue (400)

| H | 行号 | 规则 |
|---|------|------|
| H5 | 253-255 | GET 列表无密码 |
| H6 | 323-327 | encrypted_pw POST only |
| H7 | 306,340,357 | 编辑留空不改 |
| H8 | 346-347 | SSH 私钥提交时传输 |

### SchedulesPage.vue (295)

| H | 行号 | 规则 |
|---|------|------|
| H9 | 177 | cron 正则 `^[\d\s*/,\-]+$` |
| H10 | 173-189 | buildSchedulePayload 校验 |
| H11 | 263-267 | runNow → POST /sync/files |

### RetriesPage.vue (191)

| H | 行号 | 规则 |
|---|------|------|
| H12 | 129-134 | 客户端 filter（展示） |
| H13 | 146,160 | retry/delete JWT |

### CommandsPage.vue (168)

| H | 行号 | 规则 |
|---|------|------|
| H14 | 139-153 | 只读 command-logs / ssh-sessions |
| H15 | 50 | command 文本展示（后端已存） |

## Closure 表

| H | 判定 | 依据 |
|---|------|------|
| H1-H4 | SAFE/RISK | exec 走后端；H3 RISK 临时命令（后端 dangerous check） |
| H5-H8 | SAFE | 无 localStorage；API 脱敏 |
| H9-H11 | SAFE | cron/路径校验；sync JWT |
| H12-H13 | SAFE | 只读+操作 JWT |
| H14-H15 | SAFE | 只读审计视图 |

**len(H)=15, Closure=15**

## FINDING

无 P0/P1 新 FINDING。

## DoD

- [x] 5 页全文 Read
- [x] len(H)==Closure
