docs: 广告位轮播验收记录与实施计划 Task 13 勾选(线上部署完成)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-29 09:35:37 +08:00
parent 19d4fd143a
commit c64db3c53a
2 changed files with 58 additions and 5 deletions
@@ -688,11 +688,11 @@ export function fetchDeleteAd(id: string) {
### Task 13: 部署上线(**需用户明确确认后执行**;顺序硬约束:ov 先 cn 后) ### Task 13: 部署上线(**需用户明确确认后执行**;顺序硬约束:ov 先 cn 后)
- [ ] **Step 1: 镜像** —— `git archive HEAD | docker build -f docker/server.Dockerfile -t photo-live-server:<sha>-<日期> .` + 双端 web(VITE_VIEWER_BASE/VITE_EMBED_ORIGIN 按 2026-09-24 定稿:cn 镜像两参=outside,ov 镜像两参=outside)。 - [x] **Step 1: 镜像** —— `git archive HEAD | docker build -f docker/server.Dockerfile -t photo-live-server:<sha>-<日期> .` + 双端 web(VITE_VIEWER_BASE/VITE_EMBED_ORIGIN 按 2026-09-24 定稿:cn 镜像两参=outside,ov 镜像两参=outside)。
- [ ] **Step 2: ov 先行** —— 传镜像 → `migrate-deploy ov`(新 ads_ov 表)→ - [x] **Step 2: ov 先行** —— 传镜像 → `migrate-deploy ov`(新 ads_ov 表)→
`docker compose -f /opt/photo-live/deploy/docker-compose-ov.yml up -d`(api-ov 获 `docker compose -f /opt/photo-live/deploy/docker-compose-ov.yml up -d`(api-ov 获
'ad' 消费能力;编排文件在服务器 deploy 目录,非仓库根)→ 验证 `/v1/health` + 'ad' 消费能力;编排文件在服务器 deploy 目录,非仓库根)→ 验证 `/v1/health` +
**旧 cn 未发事件期间 ov 空转正常**。 **旧 cn 未发事件期间 ov 空转正常**。
- [ ] **Step 3: cn 后行** —— 传镜像 → `migrate-deploy cn` → `up -d`(api/worker/sync)→ **restart web 容器**(坑位①)→ 后台「广告位」页冒烟(建广告→上传→绑定→保存)。 - [x] **Step 3: cn 后行** —— 传镜像 → `migrate-deploy cn` → `up -d`(api/worker/sync)→ **restart web 容器**(坑位①)→ 后台「广告位」页冒烟(建广告→上传→绑定→保存)。
- [ ] **Step 4: 端到端验收** —— 观众页(ov 域名)相册页看到轮播/徽标/✕ 关闭(关标签重开重现)/点击新开标签;绑定相册 A 不在相册 B 显示;停用后 ov 副本行删除(`ads_ov` 查询)。 - [x] **Step 4: 端到端验收** —— 观众页(ov 域名)相册页看到轮播/徽标/✕ 关闭(关标签重开重现)/点击新开标签;绑定相册 A 不在相册 B 显示;停用后 ov 副本行删除(`ads_ov` 查询)。
- [ ] **Step 5: 验收记录 + 记忆更新** —— docs/plans/progress/ 落档;project-current-work 记忆补广告位上线状态。 - [x] **Step 5: 验收记录 + 记忆更新** —— docs/plans/progress/ 落档;project-current-work 记忆补广告位上线状态。
@@ -0,0 +1,53 @@
# 广告位轮播 验收记录(2026-09-29)
> 对应:设计方案 docs/plans/2026-09-28-广告位轮播-设计方案.md + 实施计划
> (Task 1-13 全部完成)。版本 `photo-live-server:bfba76b-20260929` +
> `photo-live-web:bfba76b-20260929-cn/-ov`(web 一次构建双标签——按 2026-09-24
> 定稿 cn/ov 两版构建参数已完全一致)。
## 1. 开发过程(子代理驱动 + 双阶段审查)
- 13 任务每任务独立实现者 + 规格审查 + 质量审查;整体终审(含 seam 级核查)。
- **审查战果**(真问题,全部修复并有测试钉住):
1. inbox 依赖暂存豁免缺 'ad'(不补=所有 ad 事件永久暂存永不投影)——计划评审阶段抓出;
2. reconciler SWEEP_ENTITY_TYPES 漏列 ad(对账无自愈通道)——实现者自审抓出;
3. 后台排序并列簇 ≥3 时 move 算法跳位(create 不传 sortOrder 全 0 为默认态)——质量审查抓出,create 追加 max+1 + 纯逻辑抽取修复;
4. verifyStaging 无 staging 前缀校验 + 无运行时 2MB 上限(管理员可把照片原图提升为公开广告)——终审抓出;
5. 失效绑定编辑死锁(相册软删后保存任何字段 400)——终审抓出,changed-only 提交修复;
6. heic 白名单桌面浏览器破图(广告无变体流水线)——终审抓出,广告域白名单收窄 jpeg/png。
- 有意偏差登记:终键版本化 `ads/{adId}/v{N}.{ext}`(copyIfAbsent 禁止覆盖,已回填设计文档);
乐观锁条件更新(防终键版本段漂移);测试用例 ④⑤ 顺序对调(墓碑后无法断言 v3 保持)。
## 2. 测试结果
contracts 33 · api 单测 59 · **ads e2e 17**(含真实 MinIO PUT/staging 冒充键 400/超限 400/heic 400/
同步贯通)· sync e2e 28(含 reconcile 生产环 ad 清扫)· admin 105(含排序并列簇/失效绑定/键集守护)·
viewer 258(含轮播组件 6 + 页面关闭记忆 2)· typecheck 13/13 包全绿。
**先在失败(非本功能,登记待修)**:batch-ops e2e ⑦(PHOTO_DUPLICATE 409——并行合入的上传查重
特性的 spec 未更新,base 上复现同败);apps/admin clipboard.spec.ts 两处 prettier lint。
## 3. 部署(2026-09-29,硬约束顺序执行)
| 步 | 结果 |
| --- | --- |
| ov 先行 | 镜像加载 → migrate-deploy ov(ads_ov 表)→ up -d → health ok;**新 ads 端点实测响应**(旧冒烟相册已清理返回 ALBUM_NOT_PUBLIC 同码 404——路由与语义正确) |
| cn 后行 | 镜像加载 → migrate-deploy cn(ads 表)→ up -d(6 容器 healthy)→ **web 一并 restart**(坑位①)→ health ok + 后台 200 + sync 启动 |
| 顺序合规 | ov 获 'ad' 消费能力先于 cn 可能产生 ad.* 事件(设计 §10 硬约束) |
## 4. 待用户操作 / 遗留
- **[用户] 视觉验收**:后台「系统管理 → 广告位」建广告(建议图 1200×360、≤2MB、jpeg/png)→
观众页(ov 域名)相册页头部下方查看轮播/徽标/✕ 关闭/点击跳转。
- **[用户·9-24 起仍未做] ov 安全组放行 TCP/13306 ← 101.37.116.184**:stat-return(60s 统计回传)
与 reconcile digest 阶段仍在幂等重试(内容推送走 443 不受影响)。
- 登记待修:batch-ops ⑦ spec、clipboard.spec lint、reconcile sweep 分页游标不前进(>500 行类型
清不空——ads 全表返回已绕开,既有 sibling 类型远期问题)、相册搜索 250 上限与 SlotBindDialog
同构代码抽取(M2/M4/M6 defer 项)。
- gitea 推送仍待令牌(bfba76b 等提交未推送,镜像已直传服务器)。
## 5. 运维备忘
- 广告域白名单与照片域已分离(AD_IMAGE_CONTENT_TYPES,jpeg/png,无 heic)。
- 后台排序:create 自动尾部追加(max+1);≥3 并列簇的 move 为文档化保险分支(正常不可达)。
- ov web 与 cn web 同一构建产物(双标签仅溯源);ROOT_REDIRECT 运行时区分。