跳转至

DTL L-20260828-04 · 双包修复后浏览器级 V4/V5 复测闭环

字段
日志编号 L-20260828-04
日志类型 DTL(听写任务日志)
维护人 听写 DT
任务来源 用户指令「听云执行了,请继续」(承接 L-20260828-03 用户级端到端测试报告发现的 8.218 JS 全 404 + 112 品类切换失效问题)
测试方式 浏览器级端到端(browser_use 子代理执行 V4 登录跳转 + V5 品类切换 + 直接访问回归)
关联文档 L-20260828-03(用户级测试报告,发现 bug)、L-20260828-02(Phase 4 公网黑盒闭环)、WDE-TASK-L-20260828-01(听码双 build 修复)、OCL-TASK-L-20260828-03(听云双包部署)、OCL L-20260828-04(听云回执)

一、复测背景

L-20260828-03 用户级端到端测试发现两环境两类 bug:

环境 现象 根因(bundle 诊断实锤)
8.218 /mfr/* 全 JS 404,无法登录 旧 build 无 basePath → 资源引用裸 /_next/* → 被 Caddy 兜底给 OPR-Admin
112 品类卡片点击无切换 112 现网 build 落后于仓库代码(本地 dev/生产模式均正常,不复现)

修复链路:听码双 build(W1 basePath 版/W2 无 basePath 版)→ 听写转存 ocm/private/deploy/ → 听云双 ECS 替换 standalone + Caddy handle_pathhandle 调整(保留前缀)。

二、复测矩阵(2026-08-28 听云 OCL L-20260828-04 回执后)

2.1 听云 curl 自证(V1~V3 + V6~V7,双机全绿)

# 断言 8.218 实测 112 实测 判定
V1 登录页 200 /mfr/login=200 :3000/login=200
V2 chunk 前缀 /mfr/_next/static/chunks/*(带前缀) /_next/static/chunks/*(无前缀)
V3 chunk 200 webpack chunk=200 webpack chunk=200
V6 mfr-open 无 token 401 401(:9100 实为 v2 API)
V7 零回归 admin/wkr/cst/dl 全 200 harbor80=200,mfr3000root=200

2.2 听写浏览器级复测(V4 + V5 + 直接访问回归)

# 断言 8.218 实测 112 实测 判定
V4 登录跳转 /mfr/login/mfr/quote 显示品类卡片 /login/quote 显示品类卡片
V5 品类卡片切换 灯具 1.5h / 家电 2.0h / 卫浴 2.5h 灯具 1.5h,切换正常
回归 直接访问报价页 /mfr/quote 正常显示 /quote 正常显示
控制台 无 chunk 404 / 无 JS 错误 0 chunk 404 0 chunk 404

2.3 证据截图清单

环境 截图文件
8.218 8218_login_initial.png / 8218_after_login_click.png / 8218_category_lamp.png / 8218_category_appliance.png / 8218_category_bathroom.png / 8218_quote_direct.png
112 112_login_initial.png / 112_after_login_click.png / 112_category_lamp.png / 112_after_select_lamp.png / 112_category_switch.png / 112_quote_direct.png

三、本轮修复链路总结

阶段 阻塞 根因 修复 验证
听码 W1 8.218 JS 全 404 旧 build 无 basePath next.config.mjs basePath: "/mfr" 已在 → 直接 build → 包 mfr-portal-8218-basepath-20260828-1253.tar.gz (30.17MB, SHA256 e34505caa36ca7dfea6d96b8f7c21707c233678e7eb060951254c278b2716a87) A1/A2 PASS
听码 W2 112 品类切换失效 现网 build 落后 临时注释 basePath → build → 包 mfr-portal-112-nobasepath-20260828-1224.tar.gz (30.17MB, SHA256 32bd1d86f89f2822957f3c058ad1be519f42aa26ddbc50477e6bfa631fe80db2) → 改回 basePath A3 不复现,代码零改动
听云 S1 8.218 handle_path 剥前缀 → Next.js 拿到 /login 404 handle_path 语义错(MFR Next.js basePath 需保留前缀) Caddyfile handle_path /mfr/*handle /mfr/* V1=200
听云 S2 Windows 打包 symlink 解引用 → styled-jsx MODULE_NOT_FOUND tar 默认解引用 symlink 替换为 .pnpm store symlink Ready in 179ms / 160ms
听云 S3 bind mount inode 漂移第 3 次复现 sed 后容器内仍旧内容 docker rm -f dip1-prod-caddy + 原样重建 Caddyfile 配置生效

四、关键发现

  1. Caddy handle_path vs handle 语义差异handle_path 剥离前缀(/mfr/login/ 转发),handle 保留前缀。Next.js basePath 配置下,Caddy 必须用 handle 保留前缀,否则 Next.js 拿到 /login 但其路由表只有 /mfr/login → 404。本规则写入 Caddy 配置规范,后续所有子路径部署的前端应用必须配套 basePath + Caddy handle(保留前缀)。
  2. Windows 打包 symlink 陷阱:tar 在 Windows 下默认解引用 symlink 为普通目录,导致 next/react 的 styled-jsx 子依赖丢失。打包必须保留 symlink(PowerShell tar --dereference=false 或在 Linux 端打包),或如听云现场处置——替换为指向 .pnpm store 的 symlink。
  3. bind mount inode 漂移:宿主 sed/gawk -i inplace 后,容器内视图未同步(inode 漂移),validate/reload 假象成功。Caddyfile 变更后必须 docker rm -f 重建容器或 docker exec ... caddy reload 强制重读
  4. 品类切换 bug 的"build 落后"诊断模式:本地 dev/生产模式均正常 → 代码无 bug → 现网 build 落后于仓库代码。本模式可作为前端 bug 的首选排查路径,避免无谓改码。

五、Phase 4 浏览器级闭环判定

承接 L-20260828-02 的公网黑盒闭环,本轮补齐用户级浏览器端到端验证:

工作包 L-20260828-02 判定 本轮补强 最终判定
D01 MFR 开放报价生产回归 🟢 4/4(curl C8=201) 浏览器级 V4 登录跳转 + V5 品类切换 + 直接访问回归 双机全 PASS 🟢 8/8
D02 生产健康检查 🟢 8/8(curl 端点全 200) 控制台无 chunk 404 / 无 JS 错误 双机全 PASS 🟢 10/10
D03 SCAT V1.1 不部署声明 🟢 维持 不涉及 🟢 维持

Phase 4 浏览器级闭环达成 ✅ — 用户反馈的 8.218 JS 全 404 + 112 品类切换失效两类问题已修复,零回归。

六、下一步建议(供决策,非自动执行)

编号 建议 执行人 触发条件
N1 @mfrNav workaround 移除时机评估 听写 DT 起草评估单 8.218 稳定运行 ≥24h 后
N2 git 同步至 Gitee hk2026 main 分支(团队协作源代码备份,含 WDE 双包修复 + 配套 docs) 听写 DT 用户明确指令"git 同步"
N3 git tag v-phase4-browser-verified 快照标记当前位置 听写 DT 用户明确指令(PJM §4.6)
N4 BPL 楼宇档案种子数据(R3 待办,尖沙咀等核心区 50-100 条) 听写 DT 起草 + 听码填充脚本 + 听云部署 用户明确指令
N5 生产 MFR-ADM 真实 token 接入后补充公网 201 路径冒烟(N4 of L-20260828-02 延续) 听写 DT Keycloak 正式接入或生产 token 机制就绪

当前状态:🟢 Phase 4 浏览器级闭环达成 · D01 8/8 + D02 10/10 + D03 维持 · 8.218 basePath 版 + 112 无 basePath 版 双机零回归 · MFR 开放报价生产上线主链路全通(curl 黑盒 + 浏览器端到端双维度验证)

— 本日志完 —