# BUG 专项逐行走读 — Batch 6（2026-06-04）

**标准**: `docs/project/line-walk-audit-standard.md` · 八类仅列 **BUG**

## 范围（5 文件，全文 Read）

| 文件 | N | Read |
|------|---|------|
| `server/api/auth_jwt.py` | 275 | 中间件 + `_verify_token` |
| `server/application/services/auth_service.py` | refresh / Redis | 196–620 |
| `server/background/script_execution_flush.py` | 46 | 1–46 |
| `frontend/src/composables/files/useFilesBrowse.ts` | 272 | ETag 流程 |
| `frontend/src/stores/files.ts` | 129 | 目录缓存 |

---

## Step 3 规则扫描（BUG 相关）

| 文件 | 命中 |
|------|------|
| auth_service.py | refresh 重用、Redis 故障 |
| auth_jwt.py | `token_version`、公共路由 |
| script_execution_flush.py | Redis→MySQL 批量 |
| useFilesBrowse.ts | 304 / 本地 TTL 短路 |
| files.ts | etag 与 invalidate |

---

## Closure 表（BUG）

| 文件 | 行号 | 判定 | 严重度 | 理由 |
|------|------|------|--------|------|
| auth_service.py | 239-246 | **FINDING** | P1 | 已轮换 refresh 不在 Redis 时仅 401，不升 `token_version`，被盗旧 token 与合法新会话可并存 |
| auth_service.py | 597-598 | **FINDING** | P2 | Redis 异常时 `_check_refresh_token` 曾返回 False，误拒合法刷新 |
| useFilesBrowse.ts | 187-195 | **FINDING** | P2 | 5s 内命中本地缓存直接 return，跳过后端 ETag，变更后仍显示旧列表 |
| auth_jwt.py | 217-226 | SAFE | — | `tv` 与 DB 严格比对 |
| script_execution_flush.py | 19-45 | SAFE | — | flush/stuck 分工清晰；`update_status` 内 commit |
| files.ts | 85-98 | SAFE | — | `invalidateCache` 与 mutation 联动 |

---

## FINDING 列表

### BUG-06-04-13 · P1 · auth_service refresh 重用

**现象**：轮换后旧 refresh 重放仅返回 invalid，不注销其他设备。

**修复**：`membership is False` → `_handle_refresh_token_reuse()`（`token_version++` + 清空 Redis refresh set）。

### BUG-06-04-14 · P2 · auth Redis 不可用

**现象**：Redis 异常与「令牌不在集合」同为 False。

**修复**：`_refresh_token_membership` 返回 `Optional[bool]`；`None` → `service_unavailable`。

### BUG-06-04-15 · P2 · useFilesBrowse 本地缓存短路

**现象**：有 fresh 缓存时不发 `If-None-Match`，服务端失效 ETag 后 UI 仍旧。

**修复**：缓存仅作乐观展示，始终继续条件请求。

---

## Step 7 统计

```
auth_service.py           2 FINDING（已修）
useFilesBrowse.ts         1 FINDING（已修）
auth_jwt.py               0
script_execution_flush.py 0
files.ts                  0
```

## Step 8 DoD

- [x] 5 文件覆盖
- [x] Closure 全表
- [x] 3 项已修 + pytest

## 验证

```bash
ruff check server/application/services/auth_service.py
pytest tests/test_auth_refresh_reuse.py tests/ -q --tb=no
cd frontend && npm run type-check
```

Changelog: `docs/changelog/2026-06-04-bug-batch6-auth-files-etag.md`

## 下一批 / 收尾

- BUG 专项 Batch 1–6 汇总报告（可选）
- 部署：重启 nexus + 前端构建
