From a02d1aa5d85239e1a60d40856be9903d4c301a79 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 20 Jul 2026 13:27:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(tools,ppt):=20=E5=B7=A5=E5=85=B7=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E8=81=9A=E9=9B=86=E6=9F=A5=E5=89=8D3=E2=80=94?= =?UTF-8?q?=E2=80=94=E4=BF=AE=20glob=20=E7=BB=9D=E5=AF=B9=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E5=B4=A9=E6=BA=83=20+=20PPT=20=E9=A1=B5=E8=84=9A?= =?UTF-8?q?=E6=BC=82=E7=A7=BB=E6=B2=BB=E6=9C=AC(bump=200.58.45)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - glob(聚集#2):绝对 pattern(/workspace/**/*.py)先拆「静态前缀目录+相对 glob」再匹配, 不再抛 NotImplementedError: Non-relative patterns unsupported;补首字符 / 判定兼容 Windows 宿主; 删掉原 if"**"/else 两分支完全相同的死重构。/sandbox/tools 是 Dockerfile COPY,需重建沙箱镜像生效 - ppt(聚集#1,A+C):15/16 exit-1 是手写坐标偏离 layout_grid 锁定值 2-16px 的近失,footer_y 最大头。 A:spec_lock 加 ## footer 锁定片段(x/y 用 margin_x/footer_y 预填、{PAGE} 占位),executor 逐字粘贴只换页码; C:_ALIGN_TOL 2→3px(手写 2px 过严),同步刷 SKILL/executor-base/spec_lock_reference 表述与测试值;30 测试全绿 - 新增诊断:diag_toolfail_scan(跑 scan_tool_failures 出聚集)/ diag_svgguard_breakdown / diag_malformed_samples Co-Authored-By: Claude Opus 4.8 (1M context) --- PROGRESS.md | 4 +- core/__init__.py | 2 +- scripts/diag_malformed_samples.py | 29 +++++++++ scripts/diag_svgguard_breakdown.py | 69 +++++++++++++++++++++ scripts/diag_toolfail_scan.py | 42 +++++++++++++ skills/ppt/SKILL.md | 4 +- skills/ppt/references/executor-base.md | 3 +- skills/ppt/scripts/svg_quality_checker.py | 4 +- skills/ppt/templates/spec_lock_reference.md | 21 ++++++- tests/test_svg_alignment_check.py | 9 +-- tools/fs.py | 35 +++++++++-- 11 files changed, 204 insertions(+), 18 deletions(-) create mode 100644 scripts/diag_malformed_samples.py create mode 100644 scripts/diag_svgguard_breakdown.py create mode 100644 scripts/diag_toolfail_scan.py diff --git a/PROGRESS.md b/PROGRESS.md index b9799485..b03bef6f 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-19(文件预览背景改毛玻璃虚化、观感再细化,bump 0.58.44) +最后更新:2026-07-20(工具失败聚集巡检:修 glob 绝对路径崩溃 + PPT 页脚漂移治本 A+C,bump 0.58.45) --- @@ -23,6 +23,8 @@ ### 2026-07 +- **07-20 / 0.58.45 / glob 绝对路径崩溃(工具失败聚集 #2)**:巡检近7天工具失败聚集,`glob` 排第2(3次/3task/3用户、近24h 仍在发)。根因:`tools/fs.py` GlobTool 直接 `base.glob(pattern)`,模型传绝对 pattern(沙箱 cwd 就是 `/workspace`,自然写 `/workspace/**/*.py`)时 pathlib 抛 `NotImplementedError: Non-relative patterns are unsupported`,整个调用崩返 `[Error executing glob]`。改:绝对 pattern 先 `_split_abs_glob` 拆成「存在的静态前缀目录 + 相对 glob 串」(左起吃掉不含 `*?[` 的组件当 base)再匹配;补首字符 `/`\`\\` 判定(POSIX 前导斜杠在 Windows 宿主 `is_absolute()` 为 False,沙箱是 Linux,两处对齐)。顺手删掉原 `if "**"`/`else` 两分支代码完全相同的死重构。`/sandbox/tools/` 是 Dockerfile `COPY tools/` 拷贝,**需重建沙箱镜像**才生效。 +- **07-20 / 0.58.45 / PPT 页脚漂移治本(工具失败聚集 #1,A+C)**:`shell/exit` 排第1(近7天16条 exit-1、近24h 6条,9task/7用户),实测拆解 15/16 是**逐页手写绝对坐标偏离 `spec_lock.layout_grid` 锁定值 2–16px 的「想对齐没对齐」**(footer_y 近失 27行为最大头,margin_x/content_top 各7行,content_bottom 溢出12行),字体/spec_lock 只是 WARN 不 fail。关键发现:`executor-base.md §180-185` 早有「HARD—checker-enforced」的 snap 纪律却仍被漂移,加 prose 无用,治本须机械化。**A**:spec_lock_reference 新增 `## footer` 锁定片段——x/y 用 `margin_x`/`footer_y` 预填好、页码 `text-anchor="end"` 在 `canvas_w−margin_x`、留 `{PAGE}` 占位,executor 每页**逐字粘贴只换页码**,把 footer_y 这个跨页漂移第一大头从「每页手算」收敛成「一次编写」(executor-base 加对应硬规则,SKILL.md 同步);冒烟验证锁定片段过质检 errors=0、无 footer_y/margin_x 报错。**C**:`svg_quality_checker._ALIGN_TOL` 2→3px(2px 对手写实测过严),同步刷 SKILL/spec_lock_reference/executor-base 的「2–15px/2–12px」表述与测试值(margin drift 用例 60/63/66→60/64/68,30 测试全绿)。content_bottom 溢出(装太多项,另一性质)与 grid-snap 后处理(B)本轮未做。 - **07-19 / 0.58.43**:文件预览遮罩改整屏、消除"上暗下亮"割裂——旧实现用 `#file-preview-modal { bottom: var(--preview-bottom-inset) }` 把遮罩顶到 chat-form 之上,好让预览时能边看边打字,代价是底部整条(输入区+左栏入口+右栏+状态)全不压暗,与上方压暗区形成一条硬边界的通亮带,很割裂。改为遮罩铺满整屏(`bottom`→`padding-bottom`,仍让居中卡片停在输入区之上不遮挡),底部随整屏统一压暗;仅 chat-form 由新 `body.fp-open` 类 `position:relative;z-index:95`(压过遮罩 z90,层叠上下文已核:`#app`/`#pane-mid` 均不建 context)+ 上向阴影,上浮成"悬浮活动条",继续可打字。预览时左栏/右栏/状态点击落到遮罩=关预览(符合"背景不可用"预期)。改 `web/static/dev.html` + `web/static/js/preview.js`(open/close 加/去 `fp-open`)。 - **07-19 / 0.58.44**:文件预览背景再细化——0.58.43 的整屏纯深色遮罩(`rgba(0,0,0,.5)`)仍偏硬,悬浮输入条亮在深黑上略突兀。改为**毛玻璃**:浅压暗 `rgba(20,22,28,.22)` + `backdrop-filter: blur(6px)`(带 `-webkit-` 前缀,老浏览器不支持则退化为纯浅压暗、不崩),背景虚化推远聚焦到卡片又不刺眼;chat-form 悬浮阴影同步调柔(`0 -10px 28px/.22`→`0 -6px 20px/.12`)。只动 `web/static/dev.html`。 - **07-19 / 0.58.42**:页内弹框替代原生 alert/confirm/prompt——用户反馈原生浏览器弹框(顶部丑框)应改成页内样式,且区分两类(对标 Element `dialog`/`message`)。新增 `web/static/js/dialog.js`:`dialogConfirm`/`dialogPrompt`(遮罩+卡片 modal,复用改密码那套头/体/脚布局,Promise 化以一比一替换同步的 `confirm`/`prompt`,Esc/点遮罩=取消、Enter=确认、danger 变体红键)+ `message`(顶部居中轻量 toast,success/error/info 三态,自动消失、点即消)。dev.html 加 `#app-dialog` 容器 + `#app-messages` toast + 对应 CSS。全量替换主应用 8 文件调用点(chat/files/crons/procs/wechat/skills/media/auth,共 30 处);`admin.js`(独立 admin-only 页、独立 `