Skip to content

Commit 255ffcd

Browse files
committed
docs(pwa): M4 Task13 - PWA 发布清单(部署前置 + 真机验证 + 已知限制)
1 parent 0a4a6e1 commit 255ffcd

1 file changed

Lines changed: 45 additions & 0 deletions

File tree

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# 熵减移动端 PWA 发布清单(M4 Task13)
2+
3+
> 日期:2026-08-16 | 关联:`docs/superpowers/plans/2026-08-16-pwa-mobile.md` | 状态:待执行部署
4+
5+
本清单是 PWA 移动端 MVP 上线前的**部署前置项 + 真机验证项 + 已知限制**。代码实现已完成
6+
(T0–M3 + M4 单测),以下条目需在生产环境/真机执行。
7+
8+
## 1. 部署前置(阻塞项,上线前必须完成)
9+
10+
| # | 项 | 操作 | 依据 |
11+
|---|----|------|------|
12+
| D1 | **CORS 生产白名单** | 在 `server/.env` 设置 `CORS_ORIGINS`,加入 PWA 域名(如 `https://app.entropydecrease.com`);`APP_ENV=production` 时网关为严格模式,仅允许列表内源 | `server/ai-gateway/main.py:202`、`config/app.py:22` |
13+
| D2 | **API 绝对地址** | 构建 PWA 前确保 `.env.production` 的 `VITE_API_BASE_URL`(sync-service)与 `VITE_AI_GATEWAY_URL`(ai-gateway)为**绝对 HTTPS 地址**(浏览器跨域 fetch 需要) | `client/vite.config.ts`、`lib/http/apiClient.ts` |
14+
| D3 | **HTTPS** | PWA 必须 HTTPS 托管(Service Worker 注册 + `getUserMedia` 麦克风均为 secure context 要求);`http://` 仅 localhost 例外 | 浏览器平台约束 |
15+
| D4 | **构建** | `cd client && vite build`(非 ELECTRON_BUILD)产出含 `sw.js`/`manifest.webmanifest` 的 PWA 产物,部署到静态托管 | T0.1 已验证 |
16+
17+
## 2. 真机验证清单(M4 Task12 Step2,需 iOS Safari + Android Chrome 真机)
18+
19+
| # | 验收点 | 预期 |
20+
|---|--------|------|
21+
| V1 | iOS Safari「添加到主屏幕」→ standalone 启动 | 图标/启动正常,无浏览器地址栏 |
22+
| V2 | 番茄钟:启动→切后台 5 分钟→恢复 | 计时不漂移(墙钟校准);到点通知可达(iOS 16.4+ 需先授权) |
23+
| V3 | 空白笔记:新建/编辑/插图/保存 | 工具栏不溢出(横向滚动);无输入遮挡;图片可从相册插入 |
24+
| V4 | 课堂助手-录音:点「开始录音转写」→ 说话 → 停止 | 麦克风授权弹窗;转写文本实时上屏;停止后可「生成笔记」 |
25+
| V5 | 课堂助手-视频:导入手机录屏/抖音保存的视频 | 上传进度 → 分析(1–3 分钟)→ 「视频笔记已生成」 |
26+
| V6 | 抖音链接引导:粘贴 `v.douyin.com/…` | 显示「保存到相册再导入」引导文案 |
27+
| V7 | 同步:登录 → 桌面写笔记 → 移动端拉取 | 双向增量同步;离线操作入队、恢复后补齐 |
28+
| V8 | 音频:首次点击播放番茄钟音效 | 首触可播(AudioContext 手势解锁) |
29+
30+
## 3. 已知限制(产品层需知晓,Phase 2 再解决)
31+
32+
1. **系统音频实时监听不可用**:PWA 无法捕获系统扬声器/其他 App 音频(iOS 无 API、Android 网页无法跨 App)。
33+
主力方案 = 手机系统录屏(含系统音频)导入分析;真·实时监听需 Phase 2 原生壳
34+
(Android `AudioPlaybackCapture` / iOS `ReplayKit`)。
35+
2. **PDF 直接导入不可用**:移动端剪藏/PDF 导入降级为提示(引导桌面端导入或复制文本)。
36+
3. **后台录音受限**:浏览器标签切后台时录音暂停(iOS 尤其严格);番茄钟靠墙钟校准不受影响。
37+
4. **屏幕采集不可用**:移动浏览器无 `getDisplayMedia`,课堂助手无视觉采集(仅音频转写 + 视频文件导入)。
38+
5. **剪藏受 CORS 限制**:URL 剪藏对不允许跨域 fetch 的站点会降级提示手动复制。
39+
40+
## 4. 桌面端回归结论(M4 Task12 Step1)
41+
42+
- `npm run check`:lint ✅ / typecheck ✅ / typecheck:electron ✅
43+
- `npm run test`:134/135 文件通过;唯一失败为 `electron/windowScorer.test.ts`
44+
(**并行开发中的「窗口识别优化」工作**,非 PWA 改动导致,由该功能负责人修复)。
45+
- PWA 新增单测 11 个全部通过(`isDouyinUrl` / `resampleToMono` / `computeRms`)。

0 commit comments

Comments
 (0)