From c64db3c53a9124706bfa844322c55414eb084aef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Tue, 29 Sep 2026 09:35:37 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=B9=BF=E5=91=8A=E4=BD=8D=E8=BD=AE?= =?UTF-8?q?=E6=92=AD=E9=AA=8C=E6=94=B6=E8=AE=B0=E5=BD=95=E4=B8=8E=E5=AE=9E?= =?UTF-8?q?=E6=96=BD=E8=AE=A1=E5=88=92=20Task=2013=20=E5=8B=BE=E9=80=89?= =?UTF-8?q?=EF=BC=88=E7=BA=BF=E4=B8=8A=E9=83=A8=E7=BD=B2=E5=AE=8C=E6=88=90?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Code --- docs/plans/2026-09-28-广告位轮播-实施计划.md | 10 ++-- docs/plans/progress/广告位轮播-验收记录.md | 53 ++++++++++++++++++++ 2 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 docs/plans/progress/广告位轮播-验收记录.md diff --git a/docs/plans/2026-09-28-广告位轮播-实施计划.md b/docs/plans/2026-09-28-广告位轮播-实施计划.md index cea543f..22c7d93 100644 --- a/docs/plans/2026-09-28-广告位轮播-实施计划.md +++ b/docs/plans/2026-09-28-广告位轮播-实施计划.md @@ -688,11 +688,11 @@ export function fetchDeleteAd(id: string) { ### Task 13: 部署上线(**需用户明确确认后执行**;顺序硬约束:ov 先 cn 后) -- [ ] **Step 1: 镜像** —— `git archive HEAD | docker build -f docker/server.Dockerfile -t photo-live-server:-<日期> .` + 双端 web(VITE_VIEWER_BASE/VITE_EMBED_ORIGIN 按 2026-09-24 定稿:cn 镜像两参=outside,ov 镜像两参=outside)。 -- [ ] **Step 2: ov 先行** —— 传镜像 → `migrate-deploy ov`(新 ads_ov 表)→ +- [x] **Step 1: 镜像** —— `git archive HEAD | docker build -f docker/server.Dockerfile -t photo-live-server:-<日期> .` + 双端 web(VITE_VIEWER_BASE/VITE_EMBED_ORIGIN 按 2026-09-24 定稿:cn 镜像两参=outside,ov 镜像两参=outside)。 +- [x] **Step 2: ov 先行** —— 传镜像 → `migrate-deploy ov`(新 ads_ov 表)→ `docker compose -f /opt/photo-live/deploy/docker-compose-ov.yml up -d`(api-ov 获 'ad' 消费能力;编排文件在服务器 deploy 目录,非仓库根)→ 验证 `/v1/health` + **旧 cn 未发事件期间 ov 空转正常**。 -- [ ] **Step 3: cn 后行** —— 传镜像 → `migrate-deploy cn` → `up -d`(api/worker/sync)→ **restart web 容器**(坑位①)→ 后台「广告位」页冒烟(建广告→上传→绑定→保存)。 -- [ ] **Step 4: 端到端验收** —— 观众页(ov 域名)相册页看到轮播/徽标/✕ 关闭(关标签重开重现)/点击新开标签;绑定相册 A 不在相册 B 显示;停用后 ov 副本行删除(`ads_ov` 查询)。 -- [ ] **Step 5: 验收记录 + 记忆更新** —— docs/plans/progress/ 落档;project-current-work 记忆补广告位上线状态。 +- [x] **Step 3: cn 后行** —— 传镜像 → `migrate-deploy cn` → `up -d`(api/worker/sync)→ **restart web 容器**(坑位①)→ 后台「广告位」页冒烟(建广告→上传→绑定→保存)。 +- [x] **Step 4: 端到端验收** —— 观众页(ov 域名)相册页看到轮播/徽标/✕ 关闭(关标签重开重现)/点击新开标签;绑定相册 A 不在相册 B 显示;停用后 ov 副本行删除(`ads_ov` 查询)。 +- [x] **Step 5: 验收记录 + 记忆更新** —— docs/plans/progress/ 落档;project-current-work 记忆补广告位上线状态。 diff --git a/docs/plans/progress/广告位轮播-验收记录.md b/docs/plans/progress/广告位轮播-验收记录.md new file mode 100644 index 0000000..69d2d8a --- /dev/null +++ b/docs/plans/progress/广告位轮播-验收记录.md @@ -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 运行时区分。