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_path→handle 调整(保留前缀)。
二、复测矩阵(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 配置生效 |
四、关键发现
- 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(保留前缀)。
- Windows 打包 symlink 陷阱:tar 在 Windows 下默认解引用 symlink 为普通目录,导致 next/react 的 styled-jsx 子依赖丢失。打包必须保留 symlink(PowerShell
tar --dereference=false 或在 Linux 端打包),或如听云现场处置——替换为指向 .pnpm store 的 symlink。
- bind mount inode 漂移:宿主
sed/gawk -i inplace 后,容器内视图未同步(inode 漂移),validate/reload 假象成功。Caddyfile 变更后必须 docker rm -f 重建容器或 docker exec ... caddy reload 强制重读。
- 品类切换 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 黑盒 + 浏览器端到端双维度验证)
— 本日志完 —