# 2026-06-12 远程浏览器 P0/P1 修复与生产同步

## 摘要

修复 Worker 僵尸 reservation 占槽；前端 `vite build` 同步生产；WS 连接失败时主动 DELETE 会话。

## 动机

Bug 巡查 #1–#3：生产无浏览器 SPA（用户连不上）；Worker `sessions:1` 因 `ready=false` 不进 idle 清理。

## 变更

| 区域 | 内容 |
|------|------|
| `browser-worker/config.py` | `WORKER_RESERVE_TIMEOUT_SEC=120` |
| `browser-worker/session_manager.py` | idle 清理未 attach 的 reservation |
| `browser-worker/main.py` | `attach_stream` RuntimeError 时 `destroy_session` |
| `frontend/.../useRemoteBrowserSession.ts` | WS/未登录失败时 `DELETE /browser/sessions/{id}` |
| 生产 `web/app` | `index-BimRgA6s.js` + BrowserPage 等已 `sync_webapp_to_container.sh` |
| Worker `66.154.115.131` | `docker compose up -d --build`，`/health` → `sessions:0` |

## 迁移 / 重启

- 无 DB 迁移
- Worker 已重建；主站仅同步 `web/app`（未重建 API 镜像）

## 验证

```bash
pytest tests/test_browser_url_safe.py tests/test_browser_ui_state.py -q
cd frontend && npm run type-check && npx vite build
curl https://api.synaglobal.vip/app/  # index-BimRgA6s.js
ssh nexus 'sudo docker exec nexus-prod-nexus-1 grep -rl ws/browser /app/web/app/assets/ | wc -l'  # ≥1
curl http://66.154.115.131:8443/health  # sessions:0
```

浏览器终验：登录 → 左下角地球 → `https://example.com` 有 canvas 画面。

## 未在本批修复

- F1 页内导航 SSRF（`framenavigated`）
- F3 Worker ufw 公网 8443
- P2 前进/后退 stack 与 Chromium 历史不同步

## 回滚

恢复上一版 `web/app` tar；Worker `git checkout` + `docker compose up -d --build`（或保留 idle 修复）。
