Skip to content

fix(config): preserve custom sidebar gradient palettes - #747

Merged
xaoxuu merged 1 commit into
xaoxuu:mainfrom
lambdark:codex/fix-sidebar-gradient-merge
Oct 1, 2026
Merged

xaoxuu merged 1 commit into
xaoxuu:mainfrom
lambdark:codex/fix-sidebar-gradient-merge

Conversation

@lambdark

Copy link
Copy Markdown
Contributor

变更说明

修复 glass 外观下自定义侧栏渐变失效的问题。配置 appearance.backgrounds.leftbar.gradient.light/dark 的四个颜色时,Hexo 的 deepMerge 会把默认四项与自定义四项合并成八项。Schema 解析结果仍是正确的四项,但 Stylus 的 hexo-config 读取 ctx.theme.config 中的八项,导致 length(...) == 4 分支被跳过。

复现配置(写入站点的 _config.stellar.yml):

appearance:
  preset: glass
  backgrounds:
    leftbar:
      type: gradient
      gradient:
        light: ["#123456", "#234567", "#345678", "#456789"]
        dark: ["#102030", "#203040", "#304050", "#405060"]

配置解析后,将 Stylus 消费的两组 palette 同步为 Schema 规范化结果的副本,使自定义数组按替换语义生效。仅指定一个模式时保留另一模式的默认值,重新生成时也不会累积旧颜色。

改动范围

  • layout/(EJS 模板)
  • scripts/(配置适配:scripts/events/lib/config-schema.js)
  • source/css/(Stylus 样式)
  • source/js/(浏览器脚本)
  • languages/(国际化文案)
  • docs/(方案 / 知识库 / 文档)
  • test/config-schema.test.js:新增完整覆盖、单模式覆盖、重新生成三个回归案例。

验证清单

按 AGENTS.md 的 F1 范围验证执行:

  • node --test test/config-schema.test.js:17/17 通过;新增的三个案例在修复前均失败,修复后均通过。
  • 使用真实 hexo-renderer-stylus 编译主题样式:修复前自定义颜色未进入 CSS,修复后浅色/深色的四个颜色均进入 CSS;默认配色的编译输出前后完全一致。
  • npm run lint。
  • node ci/check-require-decls.js。
  • node ci/check-commit-msg.js origin/main HEAD。
  • git diff --check。
  • 上游 CI integration 验证:等待 PR CI。

备注

本地环境为 Windows。额外运行配置热更新测试时,未修改的 test/config-hot-reload.test.js 有一个路径断言失败(实际为 Windows 反斜杠路径,预期为 /tmp/...);npm run reuse:check 也因现有路径匹配问题失败。未将这些与本次修改无关的失败计为通过,也未扩大修复范围。

本 PR 只包含配置适配和回归测试两个文件,未更改默认配色。

@bolt-new-by-stackblitz

Copy link
Copy Markdown

Review PR in StackBlitz Codeflow Run & review this pull request in StackBlitz Codeflow.

@xaoxuu
xaoxuu merged commit d3a09a0 into xaoxuu:main Oct 1, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants