# 更新记录 ## 1.0.9 - **修掉"没装加载器 + 装了多个皮肤"时的致命互写**:本皮肤(纸面档要"没有" `data-ds-dark-theme`) 与纯暗色皮肤 ABYSSAL(要"有")同时生效时,双方的 `MutationObserver` 会互相复写该属性, 形成**微任务级死循环**——渲染进程事件循环被完全占死(界面点不动、白屏),内存约 1GB/分钟暴涨。 - 写入权收敛到 `window.__dshHostSchemeArbiterV1`:只有持有者能写,未持有者只登记期望值; 持有者释放后按优先级移交。STRATA 可跟随/强制亮暗,优先级 50,让位于纯暗色的 ABYSSAL(100)。 - teardown 里的"直接按 hadDarkAttr 复位"改由仲裁器 `release()` 负责:若还有等待者则移交给它, 避免覆盖新持有者的值;没有等待者时才恢复进入前的状态。 - 落败方会打一条可操作告警(提示安装 `@dsh-eac/ui-skin-loader`)。 - 写入熔断:遇到未接入本协议的第三方反复改写时,1 秒内超过 20 次即停手并提示。 - 装了加载器时行为完全不变。 - 新增 `tests/scheme-conflict.mjs`(与 ABYSSAL 侧同源)。 ## 1.0.8 - **警示黄基准换成 RAL 1003(#F7B500)**:比原来的 #FFD100(ANSI 安全黄,最亮档)更深更实,更接近工程语境的黄。 原来的亮档保留为可选强调色 **「安全黄(亮档)」**,想换回去在设置里点一下即可。 - **修好"白底上发白发灰"**:亮黄 #FFD100 在白纸底对比只有 1.46:1,当文字/细线必被白底吃掉。 现在会**按背景亮度自动派生同色相深档**(只降明度、不改色相)用于文字/标签/品牌类 token: 纸面底下 #F7B500 → 派生 #956d00(4.70:1 ✓);#FFD100 → #856d00(5.02:1 ✓);工程橙 2.36:1 → 4.61:1;信号青 1.92:1 → 4.91:1。 大色块、斜纹警示条、按钮填充**仍用原色**(配深色字),工程观感不变。 - 新增 `tests/contrast.mjs`(25 项):遍历每个强调色 × 纸面/终端两种底,验证文字 token 对比度 ≥4.5:1。 - 断言总数:32 + 18 + 9 + 25 + 6 = **90 项**。 ## 1.0.7 - **修好"控制台看不到皮肤"这类竞态**:皮肤不再在加载瞬间判断"有没有控制台",改为 `ctx.inject(["uiSkinLoader"], cb)` **显式等待**服务出现 —— 控制台迟到一步也不会被误判成"没装",仍会正常登记托管。 - **没装控制台也能用**:等待 3 秒宽限后进入自立模式,自动应用外观,设置面板照常可用。 - **新增「皮肤」选择器**(设置面板),第一项是 **「原生(默认观感)」= 还原默认皮肤**: - 有控制台 → `switchTo("default")`(与控制台"还原默认观感"同一路径,持久化归它); - 自立模式 → 关掉自己(`enabled=false`),立即卸下、长期保持原生,随时可切回。 - 统一接口补充 `isActive()` / `mode`。 - 新增 `tests/console-wait.mjs`(18 项,含"控制台迟到不许误判"回归闸门)与 `tests/skin-selector.mjs`(9 项)并接入 CI;当前断言总数 **65 项**。 ## 1.0.3 - **补上"依赖皮肤加载器"这件事的可见性**。本皮肤是纯观感包,靠 `inject: ["uiSkinLoader", …]` 等待 第三方皮肤加载器(参考实现 `@dsh-eac/ui-skin-loader`)下发 SkinContext。此前若安装者没装加载器, 插件会**安静挂起**——不报错、也没效果,容易被误判成"装失败"。现在: - 宿主半新增**依赖自检**:启动后延迟 4 秒确认 `uiSkinLoader` 是否可用,缺失时打印可操作提示; - `package.json` 增加 `dsh.skin.requires` 元数据(服务名 + 参考实现 + 说明); - README 增加「前置要求」小节(含"没装会怎样"的对照表);安装脚本增加装载前预检; - 新增 `tests/dependency-check.mjs`(6 项断言:缺服务必警告 / 有服务保持安静 / `ctx.get` 亦识别 / 卸载后不再触发),并接入 CI。 - 说明:加载器是第三方插件、不随本包分发,也不写进 npm 依赖(它在 registry 上不存在,声明成 peer 反而会让安装失败)。 ## 1.0.2 - **修:宿主重写亮暗开关时的兜底**。STRATA 此前只在自己 `apply()` 时驱动 `body[data-ds-dark-theme]`;若宿主(跟随系统 / 手动切亮暗)自行改写它,档位就会与皮肤不一致。 现在用 `MutationObserver` 按当前有效底复位,teardown 时断开。 - 新增端到端扫测(CDP 模拟 `prefers-color-scheme: light`、真实设置弹窗、连切压力、二次激活),23 项全过。 ## 1.0.1 - **命名空间去个人化**:包名统一为 `dsh-skin-strata`,皮肤 id 统一为 `skins.strata`, 主题 id 为 `skins-theme-strata`,cordis 行 id 同步调整;作者、版权署名与文档里的 本机绝对路径一并去个人化。 - **主题注册兜底**:新增 `registerThemeSafe` —— 宿主对重复 theme id 会抛错并把整次激活 回滚成默认皮肤(皮肤被重新加载后新实例可能撞上),现在改用带序号的 id 兜底。 - `package.json` 补 `keywords`(含 `dsh-plugin`),`dsh.skin.tags` 同步补 `dsh-plugin`; 按 DeepSeek Harness 官方 README 要求给仓库打上 `dsh-plugin` topic。 ## 1.0.0 - 首个版本:纸面(亮)/ 终端(暗)两套底,可跟随应用主题;3 强调色 × 3 圆角档 × 纹理 / 硬投影 / DIN 技术字开关;全屏细网格 + 扫描线 + 左缘警示条 + 四角登记标记; 黑底白字面板头 + 错位实心影 + 黄色数字块。 - 32 项真实浏览器断言全过(含两套底的 CSS 层叠与 teardown 净场)。