Files
cc-web/.trellis/tasks/10-10-streaming-retry-history/research/frontend-result.md
shiyue 69b6db0f5b 修复完整会话历史与长气泡交互并更新 CentOS 7 发布包
提交当前工作区全部源码、回归脚本、任务记录及重新构建的 Bun baseline 发布包。发布单文件 MCP 初始化及前端资源一致性验证通过。
2026-10-10 23:40:16 +08:00

4.5 KiB
Raw Blame History

运行中长气泡前端验收

本轮隔离验收完成,浏览器脚本退出码 0。证据目录:/dev/shm/ccweb-streaming-retry-browser-G8wkN6。

变更行为

  • 正文超过 6000 字或达到 24 个文本块时显示折叠入口。多原生回复默认只显示最后回复,较早正文保留在 DOM,展开后完整显示。
  • 无原生分界的单条长回复以 420px 高度收起,展开解除裁剪。既有定位入口先展开,再定位到末段。
  • 复制入口与定位、分支控件放在现有工具行。复制取原始 Markdown 的最后原生回复;无原生分界时取完整回复。保留首行缩进和行末空格,过滤工具文本与真实回复分界。
  • 围栏内同名分界 HTML 不作为原生回复分界。半截分界流式到达时仍复制上一完整回复。
  • 使用原生按钮的 Enter、Space 操作;手机复制、定位、分支和折叠入口均至少 44px。
  • 展开状态按会话和稳定消息 ID 在本页保存,切换/完成保留,刷新重新采用默认折叠。

验证结果

真实 Chromium 149.0.7827.55,真实生产 server.js、app.js、CSS,门控 Codex mock A/B/C;测试使用独立临时会话、配置、日志及原生历史目录。服务正文长度阈值设为 4096,实际第一段 128000 字以上。

8 个阶段全部通过:初始 A、切换返回 A、等待重试刷新 A、等待重试重连 A、续跑 AB、续跑 ABC、完成 ABC、完成刷新 ABC。最终 DOM 136748 字、一个稳定助手消息 ID、3 个完整工具结果。A/B/C 首尾各一次、中间长度及顺序完整;下一用户轮次创建独立气泡且保留旧气泡。

单条长回复定位检查记录 expanded:true,visible:true,裁剪区末段实际出现在视口。单条 Enter 展开、多条 Space 展开、较早 DOM 显隐、复制原始完整末回复(代码、列表、多自然段)、手机无额外水平溢出、editorial/nocturne 主题均通过。

前端控件单测 8 组、流式恢复单测 5 组、现有历史前端回归均退出 0。app.js 和全部新脚本语法检查、所改文件 git diff --check 均通过。

截图

  • desktop-collapsed-top.png:桌面折叠,较早两段隐藏,末回复开头、列表与代码完整显示。
  • desktop-latest-reply.png:桌面末尾,复制与定位、分支同排,3 个工具结果保留。
  • completed-earliest-text.png:展开后最早第一段正文实际可见。
  • mobile-collapsed-top.png:390px 手机折叠开头及代码,44px 展开入口。
  • mobile-latest-reply.png:手机末尾三控件同排,44px 复制按钮。

以上 5 张截图均已实际查看。

来源和版本

浏览器脚本记录 sourceFingerprints 与 sourceFingerprintsAfter,本轮 sourcesChangedDuringRun:[]。

server.js c964060ad121bf16edd44caf94226455cf8a434bb8b14b9f5c434a3215d6b404
public/app.js 433b4e68a9e91440eada679199a86ca7a84cf28b0f979eb3f46044be99fe757e
public/style.css 1dc679c46b8d26947d3489851ec0058e61b35ada23ac4cd2089f38999a773f6c
scripts/assistant-bubble-controls-unit.js f60bb8c1c393503c461885fd2ee7ef7636dacd2a94c3654ddcac470dc449ca63
scripts/streaming-retry-frontend-unit.js ea085438474e436d3f47f9d3c92afd5bb4fa0ea2b3f72252e52126e902c9f262
scripts/streaming-retry-browser-check.js 02a5a1afc5cb3d7329c10165b14aba1923903c734d32ae8835b7503b0c917a2f

外部 CDN 直连与 proxyd 下载超时后,按 proxyd-accelerator 技能降级到已有局域网代理下载相同版本库。marked 12.0.1、highlight.js 11.9.0、mermaid 10.9.1 与样式使用完整真实字节;无渲染桩。缓存目录 /dev/shm/ccweb-streaming-browser-assets,来源 URL、字节长度和 SHA256 记录在 evidence.json 的 assets 字段。

复跑命令(上限 60 秒):

timeout --signal=TERM --kill-after=5s 60s env TMPDIR=/dev/shm CC_WEB_STREAMING_BROWSER_ENGINE=chromium CC_WEB_STREAMING_BROWSER_ASSET_DIR=/dev/shm/ccweb-streaming-browser-assets node scripts/streaming-retry-browser-check.js

生产边界

本前端代理仅修改 UI 源码和隔离验证脚本,未写入真实会话、rollout 或运行态,未重启生产进程。父代理已确认生产静态资源按请求读取,刷新可加载新显示控件;完整正文恢复仍依赖后端修复的部署。不能据本隔离验收声称目标真实旧气泡已经恢复。

修复前隔离证据 /tmp/ccweb-streaming-retry-browser-1XV24a:初始 A 完整,切换返回 A 时 attach 裁剪使尾段丢失。最终本轮相同链路完整通过。该修复前 server 备份取自后端早期增改时,不宣称为完整未修改基线。