# 05 · demo Playwright 扩展冒烟 Type: task Status: resolved Blocked by: 03, 04 Claimed: 2026-09-06 · wayfinder 工作会话(frontier 首票) Resolved: 2026-09-06 ## Question demo 页新入口(票 03 产物)纳入 UI 冒烟,扩展 round-1 的 11 步脚本: 1. **脚本扩展**:从 `demo_smoke10.py` 扩展新入口步骤——战略协议 CRUD、查重设置保存回读、批量工商(NO_HIT 呈现)、导入带 duplicateStrategy;建议复制为 `demo_smoke_r2.py` 保留 11 步基线(取舍票内定) 2. **执行**:`.scratch/customer-e2e/.venv10` 复用(chromium-1234 已缓存零下载);`?api=http://localhost:8080` 注入 + file:// 跨域 + OPTIONS 预检链路照旧 3. **门槛**:全步骤 PASS、console error = 0、page error = 0、网络层断言零旧契约调用(`/api/customer/\d+/`、PUT/DELETE) 4. **已知坑位**(round-1 票 10 实测沉淀):loadHead 重渲染吃掉动态输入框(reload + 重点 detail tab)、member 双分支防御性预清理、confirmSimilar 双分支等待——新步骤沿用这些模式 5. **残留清理**:UI 冒烟造的数据(协议/设置/导入)e2c- 前缀正门清理;查重设置是全局单例,测试后恢复出厂值(masterEnabled=false 或原值) ## Answer(2026-09-06 落地收官) **执行环境**:fat jar 直接复用票 04 重建版(22:29,无需重打);corretto-17(`C:\Users\Administrator\.jdks\corretto-17.0.13`)+ verify profile + MinIO env 起服 ~40s 判活;Playwright 走 `.venv10`(chromium-1234 零下载)。 **脚本形态(票内拍板)**:新建 `demo_smoke_r2.py` 复制扩展而非原地改,保留 smoke10 11 步基线(详情页签循环 5→6 加 agreements 只读过一遍)+ 4 个新入口步骤块 + 三段收尾清理(协议清扫 / dedup 兜底恢复 / `e2c-r2demo-浏览器*` archive 正门)。 **结果:20 步全 PASS,首轮一次过**;console_errors=0、page_errors=0、网络层 57 请求零旧契约形态(`/api/customer//`=0、PUT/DELETE=0)。 四个新入口逐项: 1. **战略协议 CRUD(五端点闭环)**:create(level=2, amount=300万-r2)→ **客户快照同步实证**(info.grid 战略协议='2')→ edit(对话框预填断言 level=2 → 升三级)→ detail(三级)→ **原生 confirm 删除流**(Playwright dialog accept)→ 列表空。实测 `agreement/delete` 为**软删**(DB `deleted=1` 墓碑、list 端点已过滤)——DB 复核口径按 `deleted=0`。 2. **查重设置(全局单例)**:save(阈值 66/精确/phone=0)→ 重入 tab 触发 loadDedup 回读断言 → UI 恢复原值 → **起测前 GET 原值无条件 POST 兜底恢复**双保险;DB 终态 = 原值(master=1/name=1/mode=2/threshold=80/phone=1)。 3. **F6 批量工商**:勾选自建客户 1 行 → batch-update → 结果行=1 且「未命中」徽标命中——stub 恒 NO_HIT 如实呈现语义通过。 4. **F8 导入策略**:`#impStrategy=OVERWRITE` → 上传预检 toast 回显 `策略=OVERWRITE`(t=1 suspect=1;只预检不 confirm)。 **BUDDY 归属解耦**(票 04 移交项落实):协议/F6 全部挂自建客户(owner=admin);交割只 page+preview **不 initiate**(规避 heavy F-13 同款名下全量圈定);事后 DB 复核 collab owner 仍=曾偲青 未漂移。 **残留终态(DB 实扫 `scan-residue-t05.py`)**:r2demo 客户 arch=2、协议活行=0、成员位无活跃 BUDDY 行(member/remove 软删墓碑 ×3)、`e2c-*` 活跃 **16 = seed 基准**、dedup 单例原值;导入留 2 条任务痕迹(round-1 DRAFT + 本轮预检,无业务写入,对齐 heavy F-14 先例不清理)。服务已停(8080 释放)。 **坑位沉淀**:① settings 重入的「已加载」toast 有残留竞态——回读断言改盯控件值 + 900ms 等 GET 覆盖;② `customer_team_member` 列名是 `user_id`/`member_role`(不是 member_user_id/role);③ Playwright 原生 confirm 需 `page.once("dialog", accept)` 且注册先于点击。 **产物索引**:`.scratch/customer-e2e/demo_smoke_r2.py` / `demo-smoke-r2-result.json` / `shots-r2/`×11;`.scratch/customer-e2e-r2/scan-residue-t05.py`。无新缺陷、无新 fog;**frontier → 06**(report-v2 聚合,API 三套件 + UI 冒烟四路输入全齐)。