Tree of Wisdom · 项目日志

纯事实记录。不带评价。 决策后记录。经验萃取走「收拾桌子」→ 知识库经验/


2026-05-14 ~ 2026-05-23 · 基础设施

决策记录

  • 选型:Obsidian + Quartz v4 + GitHub Pages
  • 仓库名:Tree-of-Wisdom(非 my-knowledge-base)
  • 部署方案:peaceiris/actions-gh-pages → 后弃用 → actions/deploy-pages + actions/upload-pages-artifact
  • Obsidian Git 插件:SSH 远程,10 分钟自动 push

事件

  1. Pages 部署失败(红×)。原因:仓库无默认分支。操作:Settings → Branches 创建 main 分支。
  2. 部署被环境规则拒绝。原因:github-pages environment 未配置。操作:Settings → Environments → github-pages → 移除分支限制。
  3. Actions 告警:Node 20 弃用。actions/upload-artifact@v4 需在 2026-06-02 前升级。
  4. 主公首次使用 Obsidian Git 插件,配好 SSH + 自动推送。

2026-05-23 · Hallmark 美学

决策记录

  • Hallmark study 参考站:usehallmark.com + bianjing-hours.art
  • 定位:Atmospheric(暗底暖光)
  • 6 项执行:OKLCH 色值全量转换、字重 800(display)/300(body)、字距 -0.02em、Geist Mono 时间戳、正文 62ch、字体加载淡入

方法

  • HEX → OKLCH 转换方式:Node.js 计算映射表
  • 空右栏检测手段:CSS :has() 嵌套链

2026-05-24 · 架构 + 壳

决策记录

  • 采纳审固 v3:移除明远/玄策角色,主公写 MD,伯喈做技术,严律阶段 4 审查
  • 数字策展 7 层降级为 content/系统/curation-skills/ 方法论文档
  • CSS 壳策略:自定义组件 + CSS,不替换 Quartz 核心 TSX
  • 伯喈角色定位:蔡邕原型,知识库总管

技术验证

  • body[data-slug] 属性:存在,SPA 安全(micromorph morphing 保留 body 引用,更新属性)
  • Grid 结构:.left.sidebar / .center / .right.sidebar 三栏
  • Tag/Folder/404 右栏状态:空(无 graph、无 backlinks)
  • 图谱节点点击行为:window.spaNavigate() → 不拦截
  • 右栏双区实现方案:SidebarZones.tsx(60 行)+ sidebar-toggle.inline.ts(36 行,事件委托 + nav 兜底)

新建文件

  • quartz/components/SidebarZones.tsx
  • quartz/components/scripts/sidebar-toggle.inline.ts
  • quartz/components/styles/sidebar-zones.scss
  • content/系统/全链工作流.md
  • content/系统/伯喈.md
  • content/系统/curation-skills/README.md

修改文件

  • quartz.layout.ts:右栏改用 SidebarZones
  • quartz/components/index.ts:注册 SidebarZones
  • quartz/styles/custom.scss:追加 Grid + 行宽 + 空右栏 + 间距系统 + Accent 收敛 + Hallmark 印记

第二轮调整(同日)

  • P0:sidebar-zones.scss 加 zone 间距 + 0.5px hairline 分割线 + 圆角容器
  • P1:custom.scss :root 引入 --space-xs--section-gap 间距尺度
  • P2:a:hover 改为 opacity 微调

2026-05-24 · 暗色锁定

决策记录

  • 移除 Darkmode 切换按钮
  • lightMode = darkMode(HEX 暗色值)
  • forcedark.inline.ts:强制 saved-theme="dark",nav 事件兜底
  • 原因:暗色/亮色双模式增加维护成本,当前无亮色需求

修改文件

  • quartz.layout.ts:移除 Darkmode 组件
  • quartz.config.ts:lightMode/darkMode 统一为暗色 HEX
  • quartz/components/Body.tsx:加载 forcedark.inline.ts

2026-05-24 · 记忆循环层建立

决策记录

  • 项目日志定位:纯事实记录,记忆循环层输入端
  • 经验萃取路径:项目日志 → 收拾桌子 → 知识库经验/(三文件:分类/索引/模板)
  • 整合进数字策展⑥:项目日志 = 记录层,收拾桌子 = 提炼层,知识库经验 = 沉淀层

2026-05-24 布局重构 + 框架页协作流

决策

  • 布局改为上中下三段:header 全宽黑底金字 / 左中右三栏 / footer 全宽
  • 建立框架页协作流:独立 HTML → 用户直接改 → 伯喈同步源文件
  • 删除 ArticleTitle + PageTitle,ContentMeta 移至左栏
  • 搜索保持模态,不改为内联输入

技术要点

  • 4 层 CSS 阻隔:body 8px → sidebar 6rem padding → grid 5px gap → footer.scss 4rem margin
  • > 子选择器陷阱:DOM 中间 <header> 导致 .page-header > .search 永不命中
  • Grid 覆盖需同时设 grid-template-areas: none !important
  • 组件 scss 在 custom.scss 之后加载,同选择器需 !important

当前状态

  • header: 90px, footer: 30px 浅灰
  • topbar__sitetitle: 20px/600, topbar__theme: 2.2rem/1000
  • 搜索: flex 布局右对齐, 15px, 黑底

2026-05-25 · Quartz CSS 编译机制研究

核心发现

  • base.scss 是死文件:全源码无一引用,其独特规则(scroll-behavior:smooth、grid-template-areas)不在构建输出中
  • 之前关于”base.scss sidebar padding 与 custom.scss 冲突”的调试假设是错的——实际冲突来自组件 SCSS 与 custom.scss

CSS 编译链(确认)

1. Google Fonts 内联 → 2. 组件 SCSS ×16 → 3. custom.scss → 4. joinStyles :root 变量
  • joinStyles 将 :root CSS 变量追加在所有 SCSS 之后(主题色、字体变量等)
  • :root 块会覆盖前面所有对同名 —var 的赋值
  • !important 是唯一能战胜 :root 的手段(CSS 规范:author !important > author normal,不受源顺序影响)

文姬 fonts.scss 方案原理确认

  • fonts.scss 通过 @import 放在 custom.scss 末尾
  • :root 中 !important 声明 → 战胜 joinStyles 的 :root
  • html,body 直接 !important → 双重锁定

方法

  • 源码全量扫描:components/.tsx + plugins/.ts + styles/*.scss,逐一核对 import/@use 引用链
  • 构建输出比对:base.scss 独特规则 vs public/index.css,逐一确认存在性
  • 验证:构建输出中确实存在两个 :root 块(fonts.scss 带 !important 在前,joinStyles 不带 !important 在后)

产出

  • content/系统/知识库经验/Quartz-CSS编译机制详解.md(完整分析文档,含编译链全景图、常见坑与对策、推荐工作流)

2026-05-26 · 字体修复三回合 + CDN 境外依赖清零

字体修复历程(三回合)

  • v1 Fraunces+Geist → 中文无变化:纯拉丁字体不含汉字字形
  • v2 Noto Serif SC + Noto Sans SC → 线上仍无变化:Google Fonts URL 空格未编码 → 404
  • v3 系统原生字体(文姬方案)→ 正文仍无明显变化:bodyFont=微软雅黑=之前回退字体,标题宋体有明显差异

v3 修复链

  • fontOrigin: “googleFonts” → “local”(绕过 GFW 封锁)
  • formatFontSpecification: 空格编码为 +(URL bug 修复)
  • fonts.scss: Songti SC/SimSun + PingFang SC/Microsoft YaHei 系统字体栈
  • 移除 CustomOgImages(local 模式无字体可用)

境外 CDN 清零

  • Google Fonts CSS + 字体文件 → 清零(fontOrigin: local)
  • KaTeX CSS + copy-tex JS → 下载到 quartz/static/,从自有域名加载
  • Mermaid ESM → 保留 CDN + bootcdn fallback(含 39 chunk 文件无法本地化)
  • cdnjs preconnect → 删除

关键经验

  1. 字体无变化 ≠ 字体未生效——先检查字体是否含目标语言字形
  2. Google Fonts API 200 ≠ 字体能下载——CSS 可访问,字体二进制在 gstatic.com 被墙
  3. 多词字体名必须编码空格——formatFontSpecification 直接嵌入,需手动替换 +
  4. ESM chunked 库不宜本地化——单文件可行,chunked 成本太高
  5. 系统黑体在 Windows = 之前回退字体——正文看不出变化是预期行为
  6. base.scss 是死文件——全源码无引用,所有冲突来自组件 SCSS vs custom.scss

产出

  • Quartz-CSS编译机制详解(知识库经验/)
  • quartz/util/theme.ts: formatFontSpecification 空格编码修复
  • quartz/styles/fonts.scss: v3 系统原生字体栈
  • quartz/static/katex.min.css + katex-copy-tex.min.js
  • quartz/plugins/transformers/latex.ts: KaTeX CDN → 本地路径

2026-06-01

  • 文姬 v5 左栏 CSS 部署上线
  • folder-count JS 注入去重
  • 面包屑移除,ContentMeta 恢复
  • folder-icon 18→14→11→9px
  • preview-base.html 体系建立
  • custom.scss 预埋 8 个 @zone 锚点
  • 三层工作流确立
  • Quartz 全量踩坑经验帖