From dc721ba8a33d00c9fe967840ac510ae11d3bc47a Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 3 Jul 2026 13:59:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E8=BF=9B=E5=BA=A6=20dock=20?= =?UTF-8?q?=E5=B1=95=E5=BC=80=E9=81=AE=E6=8C=A1=E6=9C=80=E6=96=B0=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E2=80=94=E2=80=94task=5Fprogress=20=E5=90=8E=E8=A1=A5?= =?UTF-8?q?=E8=A7=A6=E5=BA=95(bump=200.38.1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #task-progress-dock 是 #chat-stream 上方的 flex 兄弟(flex-shrink:0),dock 一涨高就 从顶部挤掉 chat-stream 的可视高度,scrollTop 据置不变 → 原本贴底的最新内容被推到视口 折线以下看不见。直播态 task_progress 事件重渲 dock(=涨高)后早 return,跳过了末尾的 贴底兜底,故底部不自动回滚。修:在 task_progress 分支重渲 dock 后补一句 if (nearBottom) stream.scrollTop = stream.scrollHeight(与其余事件分支同款)。 Co-Authored-By: Claude Opus 4.8 (1M context) --- PROGRESS.md | 5 ++++- core/__init__.py | 2 +- web/static/js/chat.js | 4 ++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/PROGRESS.md b/PROGRESS.md index 305f092..15ece98 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -2,7 +2,7 @@ > 配合 `DESIGN.md`。本文件只记 phase 状态、决策偏差、文件量、下一步。每条 1-2 句:做了啥 + 关键判断;细节查 `git log` / `git diff` / `DESIGN §7.9`。 -最后更新:2026-07-03(seedream size 面积钳制:修 1920x1080 被 ARK 400 打回,bump 0.37.1) +最后更新:2026-07-03(web 进度 dock 展开遮挡最新内容:贴底时补触底,bump 0.38.1) --- @@ -21,6 +21,9 @@ ## 已完成关键能力 +### 2026-07-03 / web 进度 dock 展开遮挡最新内容(贴底时补触底,bump 0.38.1) +用户报:对话「拉到底部但仍有内容被遮挡看不到」。根因:`#task-progress-dock` 是 `#chat-stream` 上方的 flex 兄弟(`flex-shrink:0`),dock 一展开/长高,`chat-stream` 可视高度就被从顶部挤掉那么多——`scrollTop` 据置不变,原本贴底的内容被推到视口折线以下看不见。而 `chat.js` 直播态 `task_progress` 事件在重渲 dock(=长高)后**早 return,跳过了末尾第 1684 行的贴底兜底**,所以底部不会自动回滚。修:在 `task_progress` 分支 `setTaskProgress` 后补一句 `if (nearBottom) stream.scrollTop = stream.scrollHeight`(与其余事件分支同款贴底逻辑),dock 涨高时把最新内容重新钉到底。只动 `web/static/js/chat.js` 直播路径一处,历史渲染/其他事件不受影响。 + ### 2026-07-03 / ppt 反纯文字页+图表落地硬门(7aa49195 二代陶瓷 deck 复盘,bump 0.38.0) 0.37 网格锁上线后同题重做(task 7aa49195),对齐/标题/节奏大幅好转,但用户复评两点成立:①**两栏裸文字页 ×4**(S8/S9/S16/S21 同为"图标小标题+下划线+文字堆 ×2 栏"零图形)——该形态无卡片、仅 2 图标,0.37 的 icon-grid/card-grid 指纹完全看不见,单调门盲区;②**全本零数据图表**(素材全是数字:100万→500万条/能耗降10-20%/碳排26%),"历程"类内容也退化成文字列表。另有两硬缺陷:S18 第 5 条描述被页脚裁掉(内容超出内容区)、S19 红色大字直接叠压灰色说明文字。修:**A 指纹加 text-columns 原型**(0 卡片+≤3 图标+≤2 图形基元+左对齐文本聚 ≥2 列)堵盲区,4 页同指纹→error;**B spec 指派图表落空检测**——spec_lock page_charts 指派了图表但该页 <3 图形基元且 <4 卡片→error("图表被退化成文字"),配 executor 硬规则"不许把指派图表降级为文字/大字 KPI";**C CJK 叠压升级 error**——两 run 均 ≥70% CJK(表意字宽 1.0em 估宽近精确)且互叠 ≥50%→error(其余情形保持 warning+渲图过目);**D layout_grid 加可选 content_bottom**——非页脚文本 baseline 越过它→error(S18 类),executor 加"写页前垂直空间预算"纪律;**E 策略层数据图表下限**——素材含 ≥3 组可比数值→全本至少 1-2 页真数据图表,零图表需在 spec 写理由;两栏裸文字列表计入"原型 ≤2 次"上限。测试 +9(30 项)全过,全量 162 过;71 charts 模板 + 中汽研 deck 模板回归零新增噪音。已知边界:S19 类叠压若文字带 rotate/scale transform 仍不可测(子树跳过);数据图表下限是策略纪律,机器只能验"指派了没画",验不了"该指派没指派"。 diff --git a/core/__init__.py b/core/__init__.py index c3fa783..ba71bfa 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -1,3 +1,3 @@ # zcbot 版本号单一事实源:web/app.py 的 FastAPI version、/healthz 返回、前端展示都引这里。 # 改版本只动这一行。 -__version__ = "0.38.0" +__version__ = "0.38.1" diff --git a/web/static/js/chat.js b/web/static/js/chat.js index 3a05825..74329aa 100644 --- a/web/static/js/chat.js +++ b/web/static/js/chat.js @@ -1624,6 +1624,10 @@ function handleSseEvent(ev, asstCard, ctx) { if (fn === "task_progress") { ctx.progressSteps = applyProgressAction(ctx.progressSteps || [], args); setTaskProgress(ctx.taskId, ctx.progressSteps); + // dock 是 chat-stream 上方的 flex 兄弟:它一涨,chat-stream 可视高度就缩, + // 原本贴底的内容被挤到视口下方看不见。进度是隐形动作会早 return 跳过末尾的 + // 触底兜底,所以这里补一次:贴底时重新钉到底,别让 dock 展开遮住最新内容。 + if (nearBottom) stream.scrollTop = stream.scrollHeight; return; // 进度是隐形动作,不落可见卡 → 不打断当前文字段 } closeTextSeg(ctx); // 关闭当前文字段:工具/选项卡追加到其下方,之后新文字另起底部段