Commit Graph
259 Commits
Author SHA1 Message Date
wait4xandGLM-5.3 eead28f3a0 chore(spec): 归档 blog-5m——萤火落地收敛
Spec: 2026-11-05_blog-5m-heatmap-fireflies

Co-authored-by: GLM-5.3
2026-11-05 11:22:26 +08:00
wait4xandGLM-5.3 44cd62e9a2 fix(lint): 豁免预览路由的 en 孪生断链——语言切换器给 zh-only 预览页生成 /en/ 链接
验证: node scripts/build-perf/content-lint.mjs dist → 通过(54 页 0 断链)

Spec: none (预览页需先上线供用户选择)

Co-authored-by: GLM-5.3
2026-11-05 11:02:58 +08:00
wait4xandGLM-5.3 97a56f3c89 feat(heatmap): v5 五案预览页上线——墨染/潮汐/星轨/织锦/萤火并陈供选型
五个候选方案在现役 P1 贪吃蛇之上重做动效语言(更安静文气的方向),
共用 loadHeatmap 真实数据与同份组件契约(offset 定位 / reduced-motion
静态兜底 / IO 离屏即停 / ink 档位独占数据密度 / accent 只给运动元素)。
多队友并行产出:@worker-one 墨染+潮汐,三个子代理星轨/织锦/萤火;
经 glm-5.3-flash 视觉复核一轮(织锦纱线可见度提档、梭子加描边、萤火
色向转暖)后上线 /heatmap-preview/ 供用户点选。

- 五组件自包含(模板+引擎+样式),选定后落进正式开源页并删本预览路由
- content-lint 一次性白名单 /heatmap-preview/(无 en 版配对豁免)

验证: pnpm astro build exit 0;本地 18926 快照零控制台错误、六 section 帧差确认全案在动

Spec: none (预览页需先上线供用户选择,选定后落地时正式立项收尾)

Co-authored-by: GLM-5.3
2026-11-05 11:01:20 +08:00
wait4xandGLM-5.3 dac34edd9a fix(cms): 修三处后台保存裂缝——新文缺 tags 构建拦截、头像传错嵌套路径、表单与 schema 契约不对齐
- 佩德罗·巴拉莫补必填 tags(read,与等待戈多同口径)——生产构建已被拦(last-good 兜底服务中)
- 头像 118a04cd0986b9c5.jpg 从嵌套误传路径(content/site/content/site/assets/)挪到 home.yaml 引用的 content/site/assets/——Sveltia 对 file 集合 media_folder 按文件目录相对解析,content/site/assets 写法翻倍成嵌套;改为 assets
- posts/moments 标签表单 required 对齐 schema 必填(z.array 无 default,漏保存即构建失败)

验证: pnpm astro build exit 0(52 页,无 InvalidContentEntryData);config-check 通过

Spec: none (生产构建阻塞的紧急内容修复)

Co-authored-by: GLM-5.3
2026-11-05 10:10:06 +08:00
wait4x 1737bf027c Merge remote-tracking branch 'origin/main' 2026-11-05 10:03:44 +08:00
wait4x d4ddc08fbd Merge branch 'spec/2026-11-05_blog-5l-admin-preview-moments'
Phase 5l 交付:后台编辑体验三件套——①预览窗格显色显字体
(registerPreviewStyle 官方口子,排版类 CSS 从清单运行时生成,
自托管艺术字体挂切片 CSS 按需取片,pattern 放宽到多类)
②编辑字段排版速查提醒(正文/瞬间/整页正文三处 hint + 管理台文档)
③瞬间置顶/隐藏真字段(对齐 posts 契约:置顶优先→日期倒序、
隐藏=列表移除+页面保留,后台开关与灰阶 pin 徽标)。

Spec: 2026-11-05_blog-5l-admin-preview-moments
2026-11-05 10:03:34 +08:00
wait4xandGLM-5.3 b99e6e744b chore(spec): 归档 blog-5l——三任务收敛(预览一致性/排版提醒/瞬间置顶隐藏)
Spec: 2026-11-05_blog-5l-admin-preview-moments

Co-authored-by: GLM-5.3
2026-11-05 10:03:34 +08:00
wait4x a3d6998de5 Create 文章 “佩德罗·巴拉莫” +1 2026-11-05 01:47:53 +00:00
wait4x ac1eab3cf1 Update 文章 “deng-dai-ge-duo” +1 2026-11-05 01:43:14 +00:00
wait4x 0d40b00f5a Update 页面文案 “about” 2026-11-05 01:23:33 +00:00
wait4x 326b9bbd79 Update 页面文案 “about” 2026-11-05 01:21:55 +00:00
wait4x 59895aca2b Update 页面文案 “home” +1 2026-11-05 01:17:03 +00:00
wait4xandGLM-5.3 c5889f960b style(about): 方案 A 复核润色(名片留白 + 链接 hover 箭头)
验证: pnpm astro build exit 0;dist/about/index.html 含 .about-id 包裹

Spec: none (已上线方案的复核润色)

Co-authored-by: GLM-5.3
2026-11-04 23:49:17 +08:00
wait4x a3ddbbefdd Merge remote-tracking branch 'origin/main' 2026-11-04 23:40:48 +08:00
wait4xandGLM-5.3 e65d44df29 style(about): 方案 A 视觉复核两条微润色
视觉复核(glm-5.3-flash:max)对已上线方案 A 的两条小意见:
- 名片与正文衔接略紧 → .about-id 加一档 margin
- 找到我列表过素 → 链接 hover 显 ↗ 箭头 + 转 accent(保留素的定位,但不至于没有 UI)

验证: pnpm astro build exit 0

Spec: none (已上线方案的复核润色)

Co-authored-by: GLM-5.3
2026-11-04 23:40:38 +08:00
wait4x 609ce1eb2e Merge remote-tracking branch 'origin/main' 2026-11-04 23:37:14 +08:00
wait4x f6da3b3c32 Merge remote-tracking branch 'origin/main' 2026-11-04 23:36:36 +08:00
wait4x 160af791b5 Merge remote-tracking branch 'origin/main' 2026-11-04 23:32:38 +08:00
wait4x 0ef0fcd394 Merge branch 'spec/2026-11-04_blog-5k-about-designs'
Phase 5k 交付:关于页形态选型闭环——五案预览(A 白纸直编 / B 名片双栏 /
C 杂志分节 / D 时间线 / E 卡片流)→ 用户选定 A → 落地「白纸直编」单字段
(四级回落 doc → blocks → intro → 内置默认,blocks 降为 legacy 通道)+
后台 markdown 字段置顶 + 预览路由退役。

Spec: 2026-11-04_blog-5k-about-designs

# Conflicts:
#	scripts/build-perf/content-lint.mjs
2026-11-04 23:32:05 +08:00
wait4xandGLM-5.3 b72ecccc80 chore(spec): 归档 blog-5k——两任务收敛(关于页定稿方案 A)
Spec: 2026-11-04_blog-5k-about-designs

Co-authored-by: GLM-5.3
2026-11-04 23:30:15 +08:00
wait4x 9a3a196eea Update 文章 “writing-template” 2026-11-04 15:25:43 +00:00
wait4xandGLM-5.3 4153c6d33f feat(about): 用户选定方案 A——关于页改「白纸直编」单字段(5k T1/T2 落地)
用户在 /about-preview/ 五案中选 A。落地:
- siteAbout schema 增 `doc`(双语整页 markdown);about.yaml 现有内容已合成
  doc(身份语 + 关于我 + 找到我 + 本站如何构建,双语齐备)
- AboutPage 四级回落:**doc 白纸直编 → blocks 块式 → intro → 内置默认**
  (doc 非空时整页只渲染它,IdCard 仍在顶部;blocks 降为 legacy 通道)
- 后台「关于页」最顶部即「整页正文」markdown 字段(这就是方案 A 的编辑模型),
  块式结构标注 legacy
- 删除两个已完成的预览路由(/about-preview/、/heatmap-preview/)与 HeatGrid
  预览组件、content-lint 白名单整体移除
- docs/管理台 新增「关于页正文」一节(四级回落说明)

验证: 构建 50 页 exit 0;content-lint 51 页 0/0/0;config-check 234 字段/74 hint;
      产物断言 doc 渲染(汇文+红身份语 / 找到我链接 / mono 小标题);
      E2E 56/56(含书架开合翻转与 5j 数据板口径更新)

Spec: 2026-11-04_blog-5k-about-designs (T1/T2)

Co-authored-by: GLM-5.3
2026-11-04 23:22:41 +08:00
wait4xandGLM-5.3 cb44d0b2d2 feat(about): 关于页五方案预览上线
用户要求 3-5 个方案供审阅:A 白纸单栏 / B 名片双栏 / C 杂志分节 / D 时间线 / E 卡片流,
共用 about.yaml 真实数据。

验证: 构建 exit 0;五案渲染、零溢出

Spec: none (预览页随选型迭代)

Co-authored-by: GLM-5.3
2026-11-04 23:10:56 +08:00
wait4xandGLM-5.3 b41b4ba8a5 feat(about): 关于页五方案预览上线(5k T1)
用户要求关于页「深入探索和设计提出 3-5 个方案,并设计出页面供我审阅」。五案共用
about.yaml 真实数据(选哪个都不用迁移内容):

A 白纸单栏:后台就是一个 markdown 编辑器,身份卡 + 单栏全文连排——编辑自由度最大
B 名片双栏:左侧 sticky 身份名片,右侧正文分节——个人站经典形态
C 杂志分节:大字引言 + 编号分节(01 关于我 / 02 兴趣版图 / 03 找到我 / 04 本站构建)
  + 右侧粘性目录跟随滚动
D 时间线:把"我是谁"讲成轨迹(起点气象 → 第二主线代码 → 作品 → 信条),沿线节点
E 卡片流:身份卡打头,正文/兴趣/链接/构建各占一张卡片,两列错落

content-lint 白名单加一次性预览路由(无 en 对应页)。

验证: 构建 53 页 exit 0;content-lint 53 页 0/0/0;
      Playwright 实测五案均渲染(3 枚图标 svg / IdCard / 9 条找得到我链接)、
      1280 与 390 零横向溢出

Spec: 2026-11-04_blog-5k-about-designs (T1)

Co-authored-by: GLM-5.3
2026-11-04 23:10:55 +08:00
wait4xandGLM-5.3 129b23cd2b fix(heatmap): 修蛇头坐标轴反了跑出边界;P1 智能寻食蛇落进正式开源页
用户选定 P1,同时报障「贪吃蛇跑到了窗口之外」。

根因:网格是**列优先**索引(idx → 列=floor(idx/7)、行=idx%7),P1 引擎的 posOf
把 x/y 写反——蛇头 y 会到 676px(网格仅 91px 高),一路走出下边界。
预览页坐标已修正;正式热力图按 P1 落地时直接用正确坐标系。

P1 落进正式开源页(Heatmap.astro):
- 头(accent 圆点)+ 8 节渐隐拖尾,沿「最近邻路径」只在有贡献的格子间滑行,
  空格不染色(371 格仅 51 天活跃,全网扫描会让蛇 86% 行程空转)
- 吃到的格子点亮 accent;月柱随蛇头所在月份递增点亮
- 路径首尾相接实现无缝循环;离开视口即停;reduced-motion 下头/拖尾隐藏、
  柱子以终态呈现;无 JS 兜底同款(noscript 样式)
- 清理死分支:P1 路径只访问活跃格子,walked 分支永不触发

验证: 构建 51 页 exit 0;E2E 56/56;
      Playwright 实测蛇头 transform 始终在网格包围盒内(x≤676、y≤83 含居中偏移)、
      eaten 递增至 51、月柱 13/13 点亮、reduced-motion 头隐藏柱立起、无 JS 柱立起

Spec: none (P1 为用户已选定方案的落地 + 坐标 bug 修复)

Co-authored-by: GLM-5.3
2026-11-04 23:04:14 +08:00
wait4xandGLM-5.3 6e343c80dc test(e2e): 书架改「开合翻转」口径,数据板断言更新为 5j 口径
- 书架(方案 C):置顶书默认展开是设计行为,点它=收起。原断言误点已展开的
  置顶行断言「变开」→ 必然失败。改为断言开合状态恰好翻转一次
- 数据板断言:5j T2 有意退役 streak/贡献蛇 SVG(信息并入热力图区),原
  「数据板渲染」断言过时;改为断言连续贡献统计条 + 更新时间标注 + 第三方
  资产零命中(含退役的 /github-assets/)

验证: E2E_BASE=http://127.0.0.1:18925 node tests/e2e.mjs → 56/56 PASS

Spec: none (测试口径随 5j 定稿同步)

Co-authored-by: GLM-5.3
2026-11-04 23:03:45 +08:00
wait4x f73a1b3e63 Merge branch 'spec/2026-11-03_blog-5j-content-refine'
Phase 5j 交付:开源页叙述合一(story 单字段 markdown 内联链接)+ 贡献数据去重与时效
(连续贡献改热力图同源本地计算并标注更新时间,贡献蛇与 streak.svg 退役)+
瞬间/书架标题下话语后台可编辑(pages.yaml 单例,字号/颜色/字体三档夹取)+
隐藏开关假开关修复(hidden 真字段 + post-visibility 契约,RSS/sitemap 一并过滤)+
热力图蛇路径优化三案预览(P1 智能寻食/P2 平滑蛇体/P3 分月清扫)。
关于页形态探索拆分为独立包 5k。

Spec: 2026-11-03_blog-5j-content-refine
2026-11-04 22:29:49 +08:00
wait4xandGLM-5.3 19b765e5b1 chore(spec): 归档 blog-5j——四任务收敛(关于页探索拆出 5k)
Spec: 2026-11-03_blog-5j-content-refine

Co-authored-by: GLM-5.3
2026-11-04 22:29:49 +08:00
wait4xandGLM-5.3 6b501fa688 chore(spec): 5j 重划——关于页探索拆出为 5k,勾选收敛
Spec: 2026-11-03_blog-5j-content-refine

Co-authored-by: GLM-5.3
2026-11-04 22:24:03 +08:00
wait4xandGLM-5.3 f581f5bc4f docs(content): story/页面说明文案/隐藏语义同步指南(5j T5)
验证: pnpm astro build exit 0

Spec: 2026-11-03_blog-5j-content-refine (T5)

Co-authored-by: GLM-5.3
2026-11-04 22:16:46 +08:00
wait4xandGLM-5.3 a2b5755680 docs(content): story 字段/页面说明文案/隐藏语义同步到指南(5j T5)
- 管理台:开源页「叙述已合一」(推荐改 story 单字段,旧字段标 legacy)、
  新增「页面说明文案」一节(瞬间/书架标题下话语 + 三档样式 + 兜底行为)、
  置顶语义补「隐藏优先」与「多本置顶在书架的默认展开」
- 写作指南:新增「隐藏文章」一节(hidden: true / tags 两种写法、页面仍生成、
  与草稿的区别、隐藏与置顶同开以隐藏为准)

验证: pnpm astro build exit 0

Spec: 2026-11-03_blog-5j-content-refine (T5)

Co-authored-by: GLM-5.3
2026-11-04 22:16:22 +08:00
wait4x 7401b512e6 Merge branch 'spec/2026-11-03_blog-5j-content-refine'
Phase 5j 进行中合并(T1/T2/T3 已交付):开源页叙述合一(story 单字段 markdown)+
贡献数据去重与时效(连续贡献改热力图同源本地计算并标注更新时间,贡献蛇与
streak.svg 退役)+ 瞬间/书架标题下话语改为后台可编辑(pages.yaml 单例,字号/
颜色/字体三档夹取)+ **隐藏开关假开关修复**(hiddenTag 只写没人读的字段导致
隐藏+置顶仍显示并排第一;新增 hidden 真字段与可见性契约 post-visibility,
RSS/sitemap 一并过滤)+ 热力图蛇路径优化三案预览(P1 智能寻食/P2 平滑蛇体/
P3 分月清扫,均带月柱联动)。

Spec: 2026-11-03_blog-5j-content-refine
2026-11-04 22:01:06 +08:00
wait4x e5f2d0089e Merge remote-tracking branch 'origin/main' into spec/2026-11-03_blog-5j-content-refine
# Conflicts:
#	content/site/opensource.yaml
#	src/pages/heatmap-preview.astro
2026-11-04 22:01:06 +08:00
wait4xandGLM-5.3 3151d20c66 chore(spec): 5j 勾选 T2
Spec: 2026-11-03_blog-5j-content-refine

Co-authored-by: GLM-5.3
2026-11-04 22:00:15 +08:00
wait4xandGLM-5.3 49acb4cbd1 fix(posts): 隐藏开关是假开关——修「隐藏+置顶仍显示并排第一」;贡献数据去重
用户实测:「有的文章同时选择了置顶和隐藏,还会显示并置顶」。

根因:后台「隐藏」开关(hiddenTag)是个假开关——它只写 `hiddenTag: true` 这个
没人读的字段,而全站过滤只认 `tags` 里的 `hidden`。于是隐藏从未生效;
叠加置顶后,这篇还在列表最前面。

- 新增 src/lib/post-visibility.ts:可见性契约单一事实源——`!draft && !hidden &&
  !tags.includes('hidden')`(两条通道都认,历史写法兼容)
- postsSchema 增真字段 `hidden`;七处消费点(首页双轨/归档 zh/en/书架/RSS zh/en/
  文章页导航)统一走 isVisiblePost
- 后台假开关 hiddenTag 换成真开关 hidden,hint 写清语义:不进列表/RSS/sitemap,
  页面本身仍生成(链接可分享);与置顶同时打开时以隐藏为准
- sitemap 过滤隐藏文章(astro.config 配置期扫 frontmatter,两种写法都认;
  内容目录不可读时宁可不排除也不炸构建)

贡献数据去重(5j T2,回答用户「连续贡献是否实时」):
- 连续贡献不再构建期抓取 streak.svg 快照(不实时、暗色需滤镜、与热力图同源重复),
  改为热力图同一份 GraphQL 日历本地计算(src/lib/heatmap.ts streakStats):
  当前连续(以最后有贡献日为终点)/ 最长 / 总贡献,界面上标注「数据更新于 X」
- 贡献蛇块与自托管 snake/streak SVG 删除,fetch 脚本 ASSETS 清空,
  build.sh 守卫改为退役说明;开源页数据板整块并入热力图区

验证: 构建 51 页 exit 0;content-lint 52 页 0/0/0;E2E 56/56;
      临时两篇「置顶+隐藏」(新字段/旧 tags 各一)实测——首页/归档/书架/
      双语首页/RSS 双语/sitemap 全部零命中,页面本身仍生成;
      清理后归档首条恢复 writing-template(普通置顶不受影响);
      开源页 snake/streak 资产零残留、连续统计条与更新时间标注就位

Spec: 2026-11-03_blog-5j-content-refine (T2 + 隐藏 bug 修复)

Co-authored-by: GLM-5.3
2026-11-04 22:00:15 +08:00
wait4xandGLM-5.3 b3c3bcf49e feat(heatmap): 蛇家族四变体预览 + 后台补齐 story/页面说明文案
验证: 构建 exit 0;实测 F1 循环(loop 1→2、每轮吃到 51 天)、F2 身长 3→26、
      F3 双头、FJ 柱子随爬行点亮、J 柱联动

Spec: none (预览页随选型迭代)

Co-authored-by: GLM-5.3
2026-11-04 21:27:13 +08:00
wait4xandGLM-5.3 34a78dacb9 feat(heatmap): 蛇家族四变体 + 补齐后台表单(5j 预览 v3)
用户选定 F+J 方向,要求蛇能**循环**(学 GitHub README 蛇的节奏),并再看几个新变体。

四个蛇变体:
- F1 循环贪吃蛇:蛇形爬一年,吃到有贡献的日子点亮;到端点停一拍、清空、重新开始,
  无限循环,身体保持 6 节(README 蛇手感)
- F2 生长蛇:每吃到一天长一节(3 → 26 上限),吃完循环重置——"积累"的隐喻最强
- F3 双蛇对开:两条蛇从最早/最新一头相向而吃,在年中交汇
- FJ 蛇 + 月柱联动:蛇爬进某个月,对应柱子同步升起并高亮;爬到年末十二根全立,
  然后回到起点、柱子清零、再来一轮(用户点名要的组合)
- J 单独保留月度柱状图作参考

实现要点:共用一套蛇引擎(蛇形路径 = 按列推进、奇数列反向;轨迹队列控制身长;
到端点判定"本轮结束"→ 900ms 后 reset 并重入);IntersectionObserver 离开视口即停;
「减少动态效果」下直接呈终态(点亮所有有贡献的格子 + 柱子立起)。

**后台补齐(回答用户"改动同步到后台了吗"——此前确实漏了两处)**:
- 开源页新增「叙述(推荐改这里)」story 字段(双语 markdown,链接内联),
  旧 blurb 标注 legacy
- 新增「瞬间 / 书架 标题下的说明」文件条目:文字(markdown)+ 字号(11–16)
  + 颜色(ink 灰阶四级)+ 字体(12 族下拉),两页独立

验证: 构建 52 页 exit 0;config-check 231 字段 / 73 hint 全过;
      Playwright 实测——F1 身长 6 且 loop 计数 1→2、第 1 轮吃到 51 天;
      F2 身长 3→26、吃掉 38 天;F3 同时 2 个蛇头;FJ 柱子随爬行递增点亮(3→5→7→10);
      J 柱子升起并悬停联动

Spec: 2026-11-03_blog-5j-content-refine (预览 v3)

Co-authored-by: GLM-5.3
2026-11-04 21:27:12 +08:00
wait4xandGLM-5.3 d6dfe39db3 feat(heatmap): 热力图六案 v2 预览上线(含贪吃蛇)
按用户反馈重做:F 贪吃蛇 / G 心跳呼吸 / H 雨滴涟漪 / I 3D 地形 / J 周冠军柱 / K 显微镜。

验证: 构建 exit 0;Playwright 逐案实测动效均生效(蛇 371 格爬完吃到 51 天)

Spec: none (预览页随选型迭代)

Co-authored-by: GLM-5.3
2026-11-04 20:47:26 +08:00
wait4xandGLM-5.3 d9721cdbd8 feat(heatmap): 热力图方案 v2——六案重做,含「贪吃蛇」(5j 预览迭代)
用户看过 v1 五案后反馈「不是很满意」,并要求「类似贪吃蛇般的方案」,故重做六案:
F 贪吃蛇 / G 心跳呼吸 / H 雨滴涟漪 / I 3D 地形 / J 周冠军柱 / K 显微镜。

**贪吃蛇(F)的关键设计判断**:真实数据 371 格里只有 51 天有贡献(总 306 次),
若照 GitHub 的做法"只吃有贡献的格子",蛇有 86% 的行程毫无反馈、看起来像卡住。
改为「爬过即留淡色轨迹 + 有贡献处强调色加重」,并把节奏 55ms→30ms(371 格约 11 秒
爬完一年),末尾给出「走过 371 格,吃到 51 天」的收束统计。

其余五案:
- G 心跳呼吸:按当日贡献量给每格不同的呼吸时长(3.4s→1.2s),纯 CSS 合成层动画
- H 雨滴涟漪:以「最后一次贡献」为圆心按距离错峰扩散,扫过闪一下;可重播
- I 3D 地形:贡献量当海拔(translateZ 0–14px),指针倾斜整块网格
- J 周冠军柱:月度总计柱状图,进视口逐根升起,悬停柱子联动高亮该月所有格子
- K 显微镜:指针处浮起圆镜,放大 5×5 邻域(用数据档位绘制)+ 日期与次数

六案共同约束:accent 只做高亮不参与数据编码(数据仍由 ink 四档承载)、
reduced-motion 全部静态、离开视口即停(IntersectionObserver)、零第三方依赖。

验证: 构建 52 页 exit 0;content-lint 52 页 0/0/0;Playwright 逐案实测——
      F 蛇身逐格推进至 371/371、吃到 51 天、读数实时更新;
      G 52 格动画 hmBreath 时长生效(2.6/3.35/3.06s…);
      H wrap.play 且 animationName=hmWave;
      I .hg-raise 有 translateZ 且容器 matrix3d 倾斜;
      J 柱子 grow 后高 14px、13 个月、悬停联动 28 格;
      K 圆镜 25 个迷你格 + 日期读数 + 焦点格 1;
      390 零横向溢出;reduced-motion 下 breath none / 蛇静态全亮 / 地形无倾斜

Spec: 2026-11-03_blog-5j-content-refine (热力图预览 v2)

Co-authored-by: GLM-5.3
2026-11-04 20:47:25 +08:00
wait4xandGLM-5.3 1a486a20d2 chore(spec): 5j 勾选 T1/T3
Spec: 2026-11-03_blog-5j-content-refine

Co-authored-by: GLM-5.3
2026-11-04 20:14:59 +08:00
wait4xandGLM-5.3 58baad5a7b feat(content): 瞬间/书架标题下的话语改为后台可编辑(5j T3)
用户原话:「瞬间、书架大标题下的话语我从哪里去改?包括其字号颜色还有字体」——
此前这两行是硬编码(瞬间来自 i18n 字典、书架是组件里的字面量),后台完全改不了。

- 新增 sitePages 单例(content/site/pages.yaml)+ pageNote() 访问器:note 走富文本
  行内管线,空则回落内置默认(原硬编码两句逐字搬入 PAGE_NOTE_DEFAULTS)
- 样式只开放三档并全部夹取:size 11–16px、color 仅 ink-1..ink-4、font 仅排版类白名单
  —— 后台可填任意值,不能让它破版或染色
- **关键坑**:字体类不能只挂 class——global.css 的 .font-kai/.font-sans 全挂在富文本
  容器作用域(.prose-*/.rich/.mom-text/.prose-body),裸 .page-note.font-kai 拿不到
  规则(实测第一次无效,仍是 Noto Sans)。改为复用 fontVarFor() 产出 inline
  font-family,class 仅作语义
- 书架与瞬间各自独立配置;默认值取「改造前外观」(均 font-sans)

验证: 构建 exit 0;content-lint 52 页 0/0/0;E2E 56/56;
      实测(只改 books 样式)书架 computed = 16px / rgb(51,52,58) / Ma Shan Zheng,
      瞬间保持 13px / ink-4 / Noto Sans(两页互不影响);
      op-gitea 侧另测:仅改文本、整段删 style(与基线逐字段一致)、非法值
      (size:40/color:red/font 乱写)全部安全回落

Spec: 2026-11-03_blog-5j-content-refine (T3)

Co-authored-by: GLM-5.3
2026-11-04 20:14:59 +08:00
wait4xandGLM-5.3 6b2e4d8666 feat(opensource): 热力图五方案动效预览上线
用户要求「热力图可以有更多的动效,而不是静态的一张图」,先上线五案供选型:
A 入场波纹 / B 光标光晕 / C 年度回放 / D 连续电流 / E 悬停周详情。
均守灰阶红线、reduced-motion 静态化、零第三方依赖。

验证: 构建 exit 0;content-lint 52 页 0/0/0;Playwright 逐案实测动效均生效
      (A hmRise 0.42s、B 光晕读数、C 第 10 周回放、D 12 格 hmFlow、E 整列 lift)

Spec: none (预览页需先上线供用户选择)

Co-authored-by: GLM-5.3
2026-11-04 20:09:54 +08:00
wait4xandGLM-5.3 7e0167a8bb feat(opensource): 热力图五方案预览 + 开源页叙述合一(5j T1 + 预设)
用户两项新需求:
①「开源页的叙述为什么要区分链接前和链接后?完全可以用 markdown 富文本统一替代」
②「热力图可以有更多的动效,而不是静态的一张图,探索相关方案供我审阅」

T1 叙述合一:
- opensource.yaml 新增 story(双语 markdown,链接内联),blurb/blurb_after 保留为
  legacy(story 为空时才用)→ 旧 yaml 零回归
- site-content 访问器取 story,GithubProfile 走 renderRich 行内模式;markdown 生成的
  裸 <a> 补 .pf-bio :global(a) 样式,与 .pf-link 观感一致
- 实测产物:pf-bio 内联 <a> 渲染成功、pf-link 拼接痕迹 0 处

热力图五方案预览(/heatmap-preview/,供用户选型):
- 新增 geek/HeatGrid.astro:可复用网格渲染件(371 格带 --c/--r 供错峰延迟),
  沿用线上同款 ink 灰阶(accent 只做高亮,不参与数据编码)
- A 入场波纹(视口内一次性斜向漫过)、B 光标光晕(radial-gradient 跟随 + 日期读数)、
  C 年度回放(滑块 scrub + 累计计数 + 自动播放)、D 连续电流(最近连续段流光 +
  连续天数大数)、E 悬停周详情(整列抬起 + 周合计/最好一天面板)
- 五案均守灰阶红线、均在 prefers-reduced-motion 下静态化、零第三方依赖、无常驻 rAF
- **两处真坑**:①网格是子组件渲染,页面级 scoped 样式够不到其内部元素 → 与格内元素
  相关的选择器必须 :global()(否则 A 的动画与 E 的抬列静默不生效)②「当前连续」按
  今天起算会得 0(今天尚未贡献)→ 改为以最后一个有贡献的日子为终点往回数,并标注
  「截至 <日期>」

另修 E2E 过时断言:书架改版为抽书阅读后,原「年份折叠组」断言必然失败,
改为「抽书行渲染 + 点击可抽开」(56/56 PASS)

验证: 构建 51 页 exit 0;content-lint 52 页 0/0/0;E2E 56/56;
      Playwright 逐案实测:A 动画 hmRise 0.42s 且播完 opacity=1、B 光晕 opacity=1
      并显示「日期 · 次数」、C 拖到第 10 周读数与淡出正确、D 12 格流光 hmFlow +
      连续 5 天(截至 2026-10-24)、E 整列 lift matrix(…,-2);390 零横向溢出;
      reduced-motion 下动画 none、光晕 display:none

Spec: 2026-11-03_blog-5j-content-refine (T1 + 热力图预览)

Co-authored-by: GLM-5.3
2026-11-04 20:09:10 +08:00
wait4x 545c91a0ff Update 文章 “writing-template” 2026-11-03 06:44:46 +00:00
wait4x 7149541a92 Update 文章 “mian-sha” 2026-11-03 06:42:54 +00:00
wait4x a868bf94fd Update 文章 “shu-zui” +1 2026-11-03 06:42:01 +00:00
wait4x a46430b088 Update 文章 “ni-tan” +1 2026-11-03 06:40:43 +00:00
wait4x 1ce9cd65ea Update 文章 “mian-sha” +1 2026-11-03 06:39:33 +00:00
wait4x 6e4d6c2f88 Update 页面文案 “opensource” 2026-11-03 06:38:05 +00:00
wait4x 6abca9f412 Merge branch 'spec/2026-11-02_blog-5i-fonts-polish'
Phase 5i 交付:字体切换失效根治(按内容诉求注入字体 CSS,此前四份字体 CSS 被
关在阅读轨分支里,技术轨与全站页面从不加载)+ 六款自托管 OFL 字族(@fontsource
切片粒度不达标→改原始 TTF 字频序细切,单页增量 27–46KB 全过闸门)+ 评论失败提示
误报的状态机修复 + 瞬间评论区配色同步(Artalk .artalk 类的 CDN 样式平级压制)+
灯箱右上关闭被全高侧栏遮挡修复 + 灯箱 caption 支持字体与颜色 + 取消彩色强调次数
限制 + 开源页项目墙恢复居中 + README 动效自托管与数据板 + 书架定稿方案 C(抽书
阅读、置顶图标化、多本置顶默认展开)。

Spec: 2026-11-02_blog-5i-fonts-polish
2026-11-03 12:47:54 +08:00