Skip to content

Releases: VDERR/dsh-echocat-skill-panel

v5.1.3 —— 修复:横栏被压成细线 / 计数丢失标签

Choose a tag to compare

@VDERR VDERR released this 24 Sep 10:41

EchoCat Skill Panel 5.1.3 — 修复细线横栏与无标签数字

用户可见修复

  • 新会话里横栏不再被宿主压缩成一条只有背景的细线。
  • DSH 窗口缩窄后,四个统计项仍会显示“回合 / 用到 / 未用 / 调用”,不会只剩数字。
  • 窄栏继续保持一行,右侧按钮不会折到第二行、重叠或越界。
  • 宽度足够时仍显示完整统计名称和“背景自定义”文字按钮。

实现

  • 为横栏外壳、横栏行和条本体设置 48px / 46px 的不可压缩最小高度。
  • 窄栏改为左侧摘要弹性收缩、右侧统计与操作区按内容取自然宽度;最窄一档由装饰图标让位,而不是删除信息标签。
  • 操作按钮组在所有宽度下都禁止换行。
  • 紧凑断点调整为 1240px,覆盖 DSH 保存的自定义会话宽度,不再只按默认 composer 上限判断。

回归门

真实组件套入 DSH hero composer 结构,在八档宿主宽度上检查:外壳高度、四个统计标签可见性、单行布局、横向/纵向溢出、右侧重叠和整体越界。八档全部通过后才允许打包。

v5.1.2 —— 修复:横栏换行导致被裁切

Choose a tag to compare

@VDERR VDERR released this 24 Sep 09:52

EchoCat Skill Panel 5.1.2 — 修复新会话横栏换行与裁切

现象

新会话的输入框上方横栏看起来是全宽,但计数、摘要或操作按钮会被挤到第二行;宿主的 composer dock 按单行控件布局时,第二行会被裁掉,表现成文字只剩半截或界面没有随宽度自适应。

根因

5.1.1 修复了匿名容器查询,却只验证了 .sr-strip-shell 外框的宽度。真实横栏内部仍有两个冲突:

  • 右半栏同时容纳四个计数、展开箭头、背景自定义 和其余操作按钮,固定内容总宽度超过了半栏。
  • .sr-strip-right 与 640px 容器规则允许/强制换行,用第二行掩盖了宽度冲突。

所以旧的宽度契约可以 57/57 全绿,真实组件仍然是两行。

修复

  • 横栏和右半栏始终保持单行,不再以换行处理冲突。
  • 在宿主 936px composer 上限内,背景自定义 自动收成保留完整 aria-label 与悬停标题的图标按钮。
  • 四个计数在常规宽度显示短标签;在宿主最窄两档只保留数值,完整标签仍保留在每个计数的 title 与 aria-label 中。
  • 收紧计数、按钮与间距,但保留摘要省略、中央 EchoCat 标志、四个计数和全部操作功能。

新回归门

新增真实 Chromium 测量 tools/check-strip-responsive.mjs,直接渲染插件自己的组件和最终样式,在宿主四档宽度下检查:

  • 横栏只有一行;
  • 横向、纵向均不溢出;
  • 右半栏内部不重叠、不越界;
  • 所有子项都留在横栏边界内。

这项检查在 5.1.1 上四档全部失败,在 5.1.2 上全部通过。

安装

解压后运行 安装.ps1,再从托盘完全退出并重新打开 DSH Desktop Beta。已保存的背景设置、本地图片与其他插件数据不受影响。

v5.1.0 —— 横栏图标显示/隐藏开关

Choose a tag to compare

@VDERR VDERR released this 23 Sep 11:09

EchoCat Skill Panel 5.1.0 — 横栏图标可以隐藏了

新增

  • 「背景自定义」里多了一个「横栏图标」开关:显示 / 隐藏输入框上方横栏中间那只猫标。
  • 隐藏后图标的位置会保留,横栏里的四个计数不会移位。横栏是三列布局(左结论 / 中间图标 / 右计数),中间那列是固定的 22px,靠它把结论居中。所以隐藏用的是 visibility 而不是 display:none —— 后者会把这一列收掉,每拨一次开关结论就横跳一次。实测:显示与隐藏两种状态下,结论的左边缘都是 905px。
  • 设置面板里的实时预览也放了一只猫标,拨开关当场就能看到效果 —— 否则被控制的那只标在面板背后,拨了没有任何反应。

没有动的东西

按你的要求,没有破坏现有结构,也没有引入新组件:

  • 开关复用上面「背景样式」那排按钮的同一套实现 —— 同 sr-bg-modes 容器、同 sr-btn 按钮、同 aria-pressed 状态。测试逐字比对了两个表达式,确认构造完全一致,并且这些 class 在样式表里确实有规则(没有规则的新控件才会显得"贴上去的")。
  • 新开关放进已有的 sr-bg-section、已有的 fieldset(保存中会一起禁用),文案用已有的 sr-bg-help。
  • 设置存在同一个 IndexedDB 记录里,跟着「保存背景」一起生效 / 取消。
  • 取值只有 show / hide 两个,非法值一律回落成 show;true / 0 这类"看起来像布尔"的值不会被误当成状态(有测试)。

顺手修掉的一个隐患

猫标原本定义在 panel.js 里。设置面板要用同一个标,而 panel.js 本来就 require('./background-panel.js') —— 反向引用会形成循环依赖。它当时恰好能跑,只是因为函数声明会提升;哪天改成 const 箭头函数就会断。所以把标提取成独立叶子模块 logo-mark.js,两边都引用它:把问题消掉,而不是依赖它碰巧不出事。

验证

  • 断言从 1550 条增加到 1571 条,新增覆盖:设置默认值与两种合法值、非法值与"像布尔的值"的回落、CSS 里隐藏规则存在、以及隐藏没有把元素移出布局(明确断言不用 display:none)。
  • 新断言是反向验证过的:把 visibility:hidden 换成 display:none 后,两条断言立刻失败(529 → 527),确认它们真的能抓到那个错误,而不是摆设。
  • 全部测试、浏览器门 14/14、十二个门全绿。

安装

dsh plugin --profile web add dsh-echocat-skill-panel

装完重启 DSH Desktop Beta。已保存的背景设置和本地图片都不受影响。

v5.0.0 —— 改名:dsh-echocat-skill-panel

Choose a tag to compare

@VDERR VDERR released this 22 Sep 17:55

EchoCat Skill Panel 5.0.0 — 改名:dsh-echocat-skill-panel

这一版只做了一件事:改名。功能、界面、行为与 4.4.2 完全一致,没有任何新功能或修复。

为什么是 5.0.0 而不是 4.5.0

因为它换了一个 npm 包名。包名在 DSH 里不只是名字 —— 它同时是 Loader 条目名、vendor 目录名和客户端 bundle id,插件就是靠这一个字符串被解析的。所以:

  • 这是另一个包,不是同一个包的升级;
  • 版本号必须高于旧包,否则任何更新检查都会把它当成降级或是别的插件;
  • 旧安装不是原地升级(见下)。

⚠️ 从 4.x 升级:必须重装,不能原地更新

插件身份变了,所以 vendor/echocat-skill-panel 和它对应的 junction 不会被新版本接管。旧目录、旧 junction、旧 bundles 条目三者必须一起清掉 —— 只留一个而目录已不存在,会让 profile 拼装失败、应用起不来。

安装.ps1 会自动清理这几个旧名字:echocat-skill-panel、echocat-skill-panel-3.0、echocat-skill-panel-2.0、EchoCat-skill-Panel-2.0、dsh-skill-report。

# 新名字
dsh plugin --profile web add dsh-echocat-skill-panel
npm install dsh-echocat-skill-panel

旧包 echocat-skill-panel(以及更早的 echocat-skill-panel-3.0)不再发新版本,它们停在 4.4.2。

改了什么

旧 新
npm 包名 echocat-skill-panel dsh-echocat-skill-panel
GitHub 仓库 VDERR/echocat-skill-panel VDERR/dsh-echocat-skill-panel
目录名 / Loader 条目 / bundle id echocat-skill-panel dsh-echocat-skill-panel
版本 4.4.2 5.0.0

仓库改过名,旧 GitHub 地址仍然有效(GitHub 自动重定向),老的 release 链接和 clone 地址不会失效。

你的设置不会丢

以下几处故意保留旧前缀,因为它们不是身份、而是存储结构:

  • echocat-skill-panel/sections —— 你展开了哪些区块
  • echocat-skill-panel/prefs —— 筛选与排序偏好
  • echocat-skill-panel/scroll —— 各表面的滚动位置
  • IndexedDB echocat-skill-panel-appearance-v1 —— 背景自定义的设置和你选的那张本地图片

跟着改名的话,这些数据不会报错、也不会消失,只是再也读不到 —— 表现就是设置全部回到默认、背景和图片不见了。所以它们保持原样,源代码里也写明了原因,避免下次改名再踩。

一个被自己抓住的 bug

改名脚本是逐行判定的,不是无脑全局替换,但仍然改坏了两处,都已修复:

  1. 安装.ps1 里那份「要清理的旧包名」列表被改成了 dsh-echocat-skill-panel-3.0 —— 一个从未存在过的包。于是它会去清理不存在的目录,而真正的旧包永远不会被清理,正好触发上面那个"应用起不来"的场景。
  2. tools/check-identity.mjs 里的旧名常量同样被改写,导致这条守卫在校验一个不存在的名字 —— 它对真正的残留报 clean。

第 2 条还暴露出一个更隐蔽的问题:新名字包含旧名字(dsh-echocat-skill-panel ⊃ echocat-skill-panel),所以任何子串扫描两个方向都会误判。守卫现在用负向后顾来区分,并把两处有意保留的旧名连带理由一起列出来 —— 而不是整文件跳过,因为跳过会让一个文件悄悄不再被检查。

验证

1550 条断言 + 浏览器门 14/14 + 十二个门全绿;身份守卫确认四处身份一致,且除了两条注明的例外,没有任何源文件还提到旧名字。

v4.4.2 —— 背景自定义:液态银蓝、六套预设、本机图片

Choose a tag to compare

@VDERR VDERR released this 22 Sep 17:16

EchoCat Skill Panel 4.4.2 — 背景自定义

新增功能

  • 真实横栏与中心报告右上角增加“背景自定义”;宽屏显示文字,窄屏为带提示的图标。
  • 六套低饱和预设,支持液态、柔和渐变、纯色和本地图片。
  • 主色、辅助色、高光色、明暗、亮度、饱和度、对比、高光、柔化、遮罩、速度、形变与指针反馈均实际作用于背景;不适用的选项会隐藏。
  • 图片支持选择、更换、移除、铺满裁切/完整显示/拉伸及位置。接受 JPG/PNG/WebP,上限 8 MB,在本机缩至长边 1920 像素以内,并单独保存在客户端数据库中,不上传。
  • 设置跨本插件表面共享,刷新后保留;实时预览、取消与恢复默认明确分开,保存失败会提示。只限当前客户端,不宣称跨设备同步。

保留与验证

保留 4.3.1 连续液态表面、卡片层级、居中布局、滚动和技能业务。静态模式不持续渲染;隐藏、卸载和减少动态仍受支持。设置使用独立 IndexedDB 空间,不修改技能数据、宿主配置或凭据流程。

相关回归、设置边界测试和真实 React 组件后台离线浏览器验证;最终数字见交付说明。未安装到运行中的 DSH、未重启或操作用户桌面、未发布。真实 DSH 安装验收由用户完成。

v4.4.1 —— 背景自定义:液态银蓝,六套预设,本机图片

Choose a tag to compare

@VDERR VDERR released this 22 Sep 16:26

EchoCat Skill Panel 4.4.0 — 背景自定义

新增功能

  • 真实横栏与中心报告右上角增加“背景自定义”;宽屏显示文字,窄屏为带提示的图标。
  • 六套低饱和预设,支持液态、柔和渐变、纯色和本地图片。
  • 主色、辅助色、高光色、明暗、亮度、饱和度、对比、高光、柔化、遮罩、速度、形变与指针反馈均实际作用于背景;不适用的选项会隐藏。
  • 图片支持选择、更换、移除、铺满裁切/完整显示/拉伸及位置。接受 JPG/PNG/WebP,上限 8 MB,在本机缩至长边 1920 像素以内,并单独保存在客户端数据库中,不上传。
  • 设置跨本插件表面共享,刷新后保留;实时预览、取消与恢复默认明确分开,保存失败会提示。只限当前客户端,不宣称跨设备同步。

保留与验证

保留 4.3.1 连续液态表面、卡片层级、居中布局、滚动和技能业务。静态模式不持续渲染;隐藏、卸载和减少动态仍受支持。设置使用独立 IndexedDB 空间,不修改技能数据、宿主配置或凭据流程。

相关回归、设置边界测试和真实 React 组件后台离线浏览器验证;最终数字见交付说明。未安装到运行中的 DSH、未重启或操作用户桌面、未发布。真实 DSH 安装验收由用户完成。

v4.2.0 —— 整个界面重做:一套现代、中性的工具面板

Choose a tag to compare

@VDERR VDERR released this 21 Sep 06:14

v4.2.0 —— 整个界面重做:一套现代、中性的工具面板

这是一次设计系统级的重做,不是调色。配色、圆角、阴影、字阶、间距一起换 —— 因为它们互相依赖:一张中性灰的卡片配上旧的紫色阴影和胶囊按钮,会比不改更糟。

升级要注意

  • 没有任何破坏性改动。 包名、路由、存储的 key、meta.yaml 的写法、已装 skill 的数据全部不变,直接覆盖安装即可。
  • host 半侧(服务端那一半)有改动,需要重启 DSH,不是刷新页面。
  • 已装的 skill 不受影响;你自己标的颜色标签、停用状态、来源记录都保留。

界面

  • 中性工具色板。 之前的 Vapor Chrome(长春花紫 + 水蓝)换成一份中性的灰 + 单一主色:底色 #F5F5F7、卡片纯白、正文 #1D1D1F、说明文字 #6B7280、发丝线 #E5E7EB、主色 #2563EB。aqua / ice / lilac 三个装饰色删掉了 —— 全局只有一种主色,用在主操作和选中态。
  • 四个色值是算过之后改的,不是照抄:三级灰、成功、警告、危险四个色在浅色底上当文字用的时候过不了 AA(警告色只有 2.80:1,而它正是"本轮没用 skill"这个核心信号)。反解"什么底色能让它过"得到的是负数亮度 —— 也就是任何浅色底都不可能,所以只能让墨色让步。每个都保留原色相、只降一档。
  • 圆角和宿主的输入框对齐。 从 DSH 里读出来的值是 22px(.Ogvy6G_card),而且宿主自己的刻度和我们结构一样:表面 22 / 表面内部的控件 8 / 真正该圆的用 999。所以 22px 给了面板、横栏、卡片、弹窗;按钮、输入框、标签页保持 8。没有无脑全 22 —— .sr-btn--sm 只有 22px 高,22px 圆角就是半圆,那正是之前要求去掉的胶囊。
  • 深色主题重做,对比度是算出来的。 每个墨色在每个深色表面都过 AA(最差 4.85:1)。两个反直觉的结果:三级灰必须调亮(原本在卡片上只有 4.27:1),而主色按钮上的字必须是深色(白色在上面只有 2.77:1)。
  • 去掉了老旧感。 阴影从每级两层叠影改成一层浅影,主色按钮的彩色光晕删掉,磨砂头部后面三个装饰性径向渐变删掉,粗边框统一成 1px,字阶从十六种收敛到四种(14 标题 / 13 正文 / 12 界面 / 11 说明)。
  • 卡片底部重新排版:调用次数在左、按钮左对齐紧跟其后、来源在右下角并和按钮同一行对齐。
  • 鼠标悬停在卡片上会轻微放大(2%),其他卡片不动。

修掉的 bug(都是这一轮定位的)

  • 颜色标签点了没反应。 根因不在颜色功能里:applySkills 把写入响应里的 skills 数组整个替换掉,而那个数组来自磁盘扫描、不带 provenance —— 所以每次写操作(改色、开关、改名、删除)都会把所有 skill 的颜色和来源记录抹掉,最多 5 秒后才回来。现在改成合并:响应里有的字段生效,没有的保留。
  • 插件自带的 skill 混在你的列表里。 它们是 DSH 把插件的 skill 和你的 skill 合并上报的,现在默认隐藏,右上角有开关可以显示,并且卡片上会标出它是哪来的。删除按钮不再对它们显示 —— 它们本来就删不掉。
  • "插件自带"开关点一下就消失。 判断显示与否用的是"被过滤掉的数量",而那个数在你点开的瞬间就变成 0 —— 于是开关把自己删了。改成用总数判断。
  • 弹窗不会自己消失。 错误提示以前是故意不自动关闭的(理由是要留时间看清 host 的报错)。实际结果是它变成常驻物、每次都要手动清。现在所有提示 1 秒后自动消失,✕ 仍在。
  • 横栏的四个图标移进了圆角框里,包括为此把横栏从 <button> 改成 role="button" 的 div —— HTML 不允许 button 里套 button。
  • 悬停缩放一开始是完全不生效的,前后有四个不同原因(第三个文件里硬编码的 translateY 按顺序赢了 / 缩小规则的特异性比放大规则高 / 入场动画的关键帧写了 transform,而动画的优先级凌驾于整个级联之上)。现在有一条真实浏览器的门禁:用 CDP 真的移动鼠标,读 getComputedStyle().transform。

安装

dsh plugin --profile web add echocat-skill-panel     # 走 dsh 的插件安装
npm install echocat-skill-panel                      # 或直接装进 profile 目录

装完重启 DSH Desktop Beta。

这一版新增的验证手段

三条断言换来三个真实 bug,所以补了三种以前没有的检查:

  • 真实浏览器门禁(tools/hover-test.mjs):真的移动鼠标、读浏览器算出来的 transform 和圆角。之前所有关于悬停的断言都是读 CSS 文本 —— 而这条功能坏过四次,每一次都对读文本的断言完全隐形。
  • 圆角审计(tools/radius-audit.mjs):问浏览器每个元素的实际圆角。这个问题读任何一个文件都答不出来,因为答案取决于三层样式里哪一层点了它的名。
  • 包身份检查(tools/check-identity.mjs):包名同时是目录名、Loader 条目名、vendor 目录名和客户端 bundle id,四处必须一致 —— 改名时漏一处就会静默失效。

v4.1.0 — 改名 echocat-skill-panel,配色换 Vapor Chrome,修复颜色标签

Choose a tag to compare

@VDERR VDERR released this 21 Sep 00:01

v4.1.0 —— 改名了:echocat-skill-panel

-3.0 是最开始在名字里标版本号用的,现在去掉。包名、目录名、Loader 条目名、vendor 目录名是同一个字符串,所以四处一起改,并由 tools/check-identity.mjs 断言它们一致。

升级要注意

旧名字 echocat-skill-panel-3.0 已经停更,新包叫 echocat-skill-panel。直接更新你已经装好的那份不会跨名字 —— 两种方式:

  1. 重新安装(推荐):下载下面的 zip,跑 安装.ps1。它会把旧的 vendor 目录、旧 junction、旧 bundles 条目一起清掉再装新的(任何一个残留都会让 profile 装配失败)。
  2. 手动替换:把 echocat-skill-panel-3.0 从 dsh.profile.bundles 和 dependencies 里删掉,换成 echocat-skill-panel,vendor 目录同名替换。

安装-3.0.ps1 保留了一个转发脚本,旧的快捷方式仍然能用。

这次修掉的 bug

颜色标签点了没反应。 原因不是代码:host 半侧在 DSH 启动时快照,客户端半侧每次刷新页面重新拉取。只按 F5 的话,客户端是新的、host 还是旧的,于是客户端发一个 host 根本不认识的 action,控件没有任何反应也不报错。

  • 这个 action 上线两个版本一直没有路由测试 —— 现在补上了,覆盖完整往返:写进插件自己的 .echocat.json(不碰作者的 meta.yaml)、从面板读取的 state feed 里读回来、清空是一次真实操作而不是"缺值"、非法 key 返回 400 而不是落盘。
  • host 改动需要重启 DSH,客户端改动只要刷新页面。 这条规则值得记住。

界面

  • 配色换成 Vapor Chrome(长春花 + 水绿 + 冰蓝 + 丁香紫),标记调色板同步重新调色 —— 键名没改,因为那是写进每个 skill 的 .echocat.json 的东西,改名会静默丢掉你已做的全部标记。
  • 修复:全插件的"胶囊"其实都不是胶囊。 生成器只给小于 100 的数字补 px,于是 border-radius:999 少了单位 —— 无效 CSS,被浏览器整条丢弃,回退成 8px 圆角矩形。修复前后用浏览器实测:胶囊控件 3 → 17,方角 18 → 4(剩下 4 个是布局容器)。顺带发现四个圆角分量属性被错列为"无单位",那几条记录等于从未生效。新增 tools/check-css-units.mjs 守住这个形状 —— 原有断言检查"声明存在",而 border-radius:999 确实存在,抓不到。
  • 分类标签筛选换成颜色块筛选;目录标题写明「点头像框选颜色标签」。
  • 四个计数常驻横栏(折叠也显示),展开的报告单独悬浮,不再和横栏合成一个盒子。
  • 状态点健康时绿,只有主机不可达时才红。
  • 横栏左侧显示 N 个 skill 已准备就绪。
  • EchoCat LOGO 居中在横栏,浅色主题用睁眼、深色主题用闭眼(跟随系统偏好和应用内主题两个信号)。

安装

npm i echocat-skill-panel

或从下面的 echocat-skill-panel-4.1.0.zip 解压后跑 安装.ps1。

装完重启 DSH Desktop Beta(host 半侧需要重启;之后只改界面的话刷新页面即可)。

本轮全部改动(180+ 条具名调整)

横栏两侧等宽包裹层让 LOGO 真正居中、计数块紧凑档、仅可 / 调用 与 用过的 保留为功能筛选、滚动条/占位符/选中色/原生强调色统一样式、三档间距层级、单一光源的层次(卡片 e2 / hover e3 / 控件 e1)、字距随字号走、每类控件四个状态齐备、CJK 严格断行、所有实时计数器等宽数字。

4.0.2

Choose a tag to compare

@VDERR VDERR released this 20 Sep 20:39

echocat-skill-panel-3.0 4.0.2

修掉一个用户可见、而且很显眼的 bug。这次要特别说明:bug 不是我发现的,也不是测试套件发现的 —— 是一位测试员定位、取证并给出修复方案的。定位质量很高,报告里连截图的逐像素测量都有。

症状

打开过一次安装面板(不需要真的装任何东西),之后页面底部就会永久多出一个空白、带细边框、圆角的白盒子。文档高度变成「视口 + 视口」,往下滑就是那个"空白带框、什么都没有的页面"。刷新页面会消失;再打开一次面板又出现。

根因

安装面板是挂到 document.body 上的(为了让 position:fixed 真的相对视口定位,而不是被横栏那一列截住)。这个 host 节点:

  • 带着 sr-root sr-portal-host 两个类 —— sr-root 是面板外框类:height:100% + 1px 边框 + 圆角 + 白底;
  • 是模块级、只创建一次、永不删除的;面板关闭时内容变成 null,于是它就成了一个空 div;
  • 本来有一条规则专门中和它(display:contents,不生成盒子)。

但那条规则被生成成了后代选择器:

.sr-root .sr-portal-host, .sr-strip-shell .sr-portal-host, … { position:static; display:contents }

而 host 自己就是 .sr-root(挂在 document.body 上),不是它的后代 —— 所以这条规则永远匹配不到它要匹配的元素。中和失效,height:100% 和边框照常生效,于是一个空盒子占满了整整一个视口的高度。

为什么 135 项断言全绿却漏了它

守这条规则的断言写的是:

ok('the portal host adds no box of its own', /\.sr-portal-host\{[^}]*display:contents/u.test(RENDERED))

它只验证声明进了样式表 —— 而 .sr-root .sr-portal-host{…display:contents} 完美满足这个正则。声明存在 ≠ 规则能命中它要作用的元素。 这正是「断言测量结果、而不是断言意图」这条纪律要防的事,结果还是发生了。

修了什么

  1. rooted: false 真正实现了(两个生成器都补上)。这个选项从第一天就写在 polish.js 的 JSDoc 里,两个生成器都没实现它 —— 这就是这个 bug 的根:任何不以 surface root 开头的选择器都会被静默展开成"后代"。现在记录可以明确声明"这条规则说的是 host 自己"。
  2. portal host 不再带 sr-root 外框类。它根本不需要:设计令牌和基础排版由 .sr-backdrop 提供,而它本身就是 surface root、并且永远是 portal 的内容。这样即使将来某条规则再丢,失败模式也只是"对话框没居中",而不是"整页空白"。
  3. 把弱断言换成会失败的断言:现在验证"这条选择器能不能匹配 host 本身"和"没有任何规则以 surface 后代的形式去找它"。
  4. 新增 tools/check-portal-assertions.mjs 并纳入 npm test:它把同一批断言喂给故意还原成 4.0.1 错误样式表的输入,确认它们真的会 FAIL;同时演示旧断言在两份样式表上都通过,把这个漏洞钉死。

实测(真 Chrome,DevTools 协议)

              文档高  页面溢出  host 是否绘制  host 盒子      display
修复前 host    1770    +885     是            820x885       flex
修复后 host     885      +0     否            0x0           contents

node tools/check-portal-host.mjs 在两种窗口尺寸、开/关两种状态下全部 exit 0。

顺带修掉两处工具问题(同一份报告里指出的)

  • tools/dock-harness.html 没有随包发布,所以 check-dock-height.mjs 在别人机器上必然 ENOENT 崩掉(我本机有它,所以从没发现)。已补进 package.json#files。
  • 浏览器候选表缺 (x86) Edge 路径。在只装了 Edge 的机器上它会打印 "no browser found" 然后 exit 0 —— 一个看起来和"通过"一模一样的静默跳过。现在 exit 2,因为**「我没测成」不是「测过了」**。

验证

十二个门全绿,1364 项断言(ui-polish 137 + 新增守卫套件 8)。另外这次 pnpm install 也第一次成功了。

装了 4.0.0 / 4.0.1 的话,面板头部的「检查更新」会报出 4.0.2。

4.0.1

Choose a tag to compare

@VDERR VDERR released this 20 Sep 10:40

echocat-skill-panel-3.0 4.0.1

修两个只在成品上才看得见的问题。

修了什么

npm 包页面上的两张截图是坏的。 package.json 的 files 里没有 docs/,而 README 引用的是 docs/panel.png 和 docs/install-sheet.png;npm 渲染的是打包进去的那份 README,所以那两个图在 npm 页面上一直是 404 —— 3.0.0 和 4.0.0 都一样。在仓库里看不出来,因为文件就在那儿。

这是在你让我更换第一张截图时顺手发现的:把 docs/ 加进 files,截图和新版本一起发出去。第一张截图也换成了当前界面(带搜索筛选、启用/停用开关、检查更新按钮的实际面板)。

版本号有三份拷贝,而只有两份被检查。 package.json、src/version.js(host 半侧)、src/client/theme.js(浏览器半侧 —— 它无法 import host 模块,因为它是独立 bundle,对着宿主冻结的平台模块表解析)。测试只断言了前两份一致,第三份没人看,而它恰恰是最容易被忘掉的。

现在五处一起被断言:三份代码 + README 标题 + 安装说明的版本行。这正是 src/version.js 注释里写的那个漂移风险 —— 以前只是写在注释里,现在会被测试拦下。

顺带

  • test/release.mjs 里有两条断言把 '4.0.0' 写死了,这次升版本就挂了。其中一条的意思是「检查器默认用发布出去的那个版本」,这是关于默认行为的断言,而不是关于版本号是多少 —— 两条现在都改成跟导入的 VERSION 比较。一个每次发版都必须手改的测试,只会训练人去改测试。
  • docs/ 进包:37 → 40 个文件,371KB → 542KB。多出的 171KB 是两张截图和 设计要点.md,换来一个图片能正常显示的包页面。
  • 1354 项断言,十二个门全绿(release 套件 52 → 57)。

安装

npm i echocat-skill-panel-3.0

已经装了 4.0.0 的话,面板头部的「检查更新」现在会报出 4.0.1 —— 这次是真的有得可更新了(4.0.0 发布时它还只能报"已是最新")。