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
事件
- Pages 部署失败(红×)。原因:仓库无默认分支。操作:Settings → Branches 创建 main 分支。
- 部署被环境规则拒绝。原因:github-pages environment 未配置。操作:Settings → Environments → github-pages → 移除分支限制。
- Actions 告警:Node 20 弃用。
actions/upload-artifact@v4需在 2026-06-02 前升级。 - 主公首次使用 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.tsxquartz/components/scripts/sidebar-toggle.inline.tsquartz/components/styles/sidebar-zones.scsscontent/系统/全链工作流.mdcontent/系统/伯喈.mdcontent/系统/curation-skills/README.md
修改文件
quartz.layout.ts:右栏改用 SidebarZonesquartz/components/index.ts:注册 SidebarZonesquartz/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 统一为暗色 HEXquartz/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 → 删除
关键经验
- 字体无变化 ≠ 字体未生效——先检查字体是否含目标语言字形
- Google Fonts API 200 ≠ 字体能下载——CSS 可访问,字体二进制在 gstatic.com 被墙
- 多词字体名必须编码空格——formatFontSpecification 直接嵌入,需手动替换 +
- ESM chunked 库不宜本地化——单文件可行,chunked 成本太高
- 系统黑体在 Windows = 之前回退字体——正文看不出变化是预期行为
- 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 全量踩坑经验帖