# 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 + 前端构建