# 保持后台会话免刷新

**日期**: 2026-06-02  
**状态**: 已实施

## 背景

用户长时间不操作后台后，再点击菜单会提示「请 Ctrl+F5 强制刷新」。根因是部署时 `prune_frontend_assets.py` 删除旧 chunk，旧标签页懒加载 404。登录会话（30 天 refresh cookie）正常，非鉴权问题。

## 方案

### 1. 部署保留 14 天孤儿资源

`deploy/prune_frontend_assets.py` 增加 `--retention-days`（默认 14）：仅删除 mtime 超过窗口的未引用 assets，窗口内旧 chunk 保留供已打开标签页使用。

### 2. 路由懒加载失败静默自愈

`frontend/src/router/index.ts`：`onError` 检测 chunk 加载失败时，首次 `location.reload()`；`afterEach` 清除防循环标志；仍失败则提示关闭标签重开。

## 不改动

- JWT / refresh cookie 续期逻辑（`frontend/src/api/index.ts`）保持不变。

## 验收

1. 部署后 14 天内打开的旧标签页可继续导航，无强刷提示。
2. `prune --dry-run` 显示 `retained_orphans` 与 `would_remove` 分离。
3. chunk 确实缺失时最多自动 reload 一次。
