All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 11m2s
回归测试发现的真 bug (V1 V2 历史遗留):
点击 ReferenceList 的图片 lightbox 或音视频 player 的 overlay 关闭时,
事件冒泡 + V2 modal backdrop-filter 创建的独立 stacking context 双重作用
导致 RecordDetailModal 也被一起关掉。
根因双重:
1. lightbox/player overlay 的 onClick 没 stopPropagation,
React 合成事件冒泡到外层 modal overlay 触发 onClose
2. V2 modal inner 加了 backdrop-filter: blur 创建独立 stacking context,
lightbox 视觉上 z 10002 全屏覆盖,但实际命中区域被限制在 modal inner 内;
点击 lightbox 视觉外的暗色区域 (modal 外) 直接命中 modal overlay → onClose
修复 (ReferenceList.tsx):
- 用 React.createPortal 把 lightbox + audio-video player overlay 渲染到 document.body
脱离 modal inner 的 backdrop-filter stacking context,真正全屏
- overlay onClick 加 e.stopPropagation() 作为 React 事件链兜底
- playerWrap 内部 stopPropagation 保留(防止点 player 内部冒泡关闭 player)
新增测试 (web/test/modal-interaction.mjs):
专项验证 RecordDetailModal 内部交互, 7 个用例:
1. 任务详情弹窗打开 OK
2. 参考素材区存在 OK
3. thumb 有 title 属性 (V2 加的 tooltip 真生效)
4. 点击 thumb 弹出 lightbox (DOM 验证)
4.1 关闭 lightbox 不连带关 modal (本次 fix 的关键回归)
5. 下载按钮 stopPropagation + 触发下载
6. modal 关闭 ✕ 按钮 OK
7. 全程无 console.error
全套回归通过:
- TS 编译过
- modal-interaction 8/8 (含 lightbox 冒泡修复验证)
- v2-smoke 25/25 (无新挂)
- vitest 71/162 与基线一致 (无新挂)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>