Commit Graph
15 Commits
Author SHA1 Message Date
wait4xandGLM-5.3 280654f9e3 feat(reader): PDF 改 pdf.js 渲染+斜体 bug 根治+评论假挂载修复+排版类
【T1 PDF 内置阅读重做】iframe 对 arXiv PDF 实测 ERR_ABORTED(浏览器 PDF
插件策略差异)→ pdfjs-dist 6.4.299 客户端 canvas 渲染:只在 /papers/
动态 import(worker ?url 打包,不进全站 bundle);文档一次取回 + IO
懒渲染(rootMargin 400px)+ 页占位 aspect-ratio 防跳动 + 12s 首屏兜底 +
微信 UA 直接兜底;工具条页码/缩放/翻页/下载/arXiv/授权声明保留。红线:
PDF 由访客浏览器直取 arXiv(CORS * 实测),仓内零副本。真页实测:
13 页 canvas 全绘制、首屏墨迹像素非空、零 console 错误。

【T2 斜体排版 bug 真凶】global.css 的 `.prose-* p > em:only-child
{ display:block; text-align:center }` 图注样式按"斜体独占段"自动命中,
把所有正文独占段斜体变成块级居中。改:图注用显式 .fig-cap 驱动 + 补
em/i { display:inline; font-style:italic } 基线;media-sample 迁移新写法,
指南注明旧写法失效原因。实测独占段与行内斜体均 display:inline/italic。

【T3 评论"假挂载"真 bug】原 initArtalk 一进来就置 mounted=true——脚本
404/被拦截时把空容器误标已挂载,5s 兜底被绕过,正是"评论区一直空着"的
来源之一。改为库就绪才算成功;另加三触发路径(IO 主 + 锚点点击 + 滚到
页底 2s 兜底)、5s 失败提示+重试钮、软导航重挂、成功打
data-artalk-mounted=1 供 E2E。

【T4 文章排版类 + 安全白名单】11 个受限类(ink-1/2/3/muted/accent、
font-serif/kai/sans/mono、drop-cap、quote-line、fig-cap)全走 tokens 禁
任意 hex;新增 rehype-class-whitelist.ts:className 白名单 + 剥离 style
与 on*;实测注入用例只剩 class="ink-2",style/onclick 全无。新坑入档:
markdown raw HTML 在 hast 是 type:'raw' 节点、白名单插件看不见 span,必须
先 rehype-raw 再过滤 → 插件链 [rehypeRaw, rehypeClassWhitelist,
rehypeLinkCards]。新依赖:pdfjs-dist、rehype-raw。

车道:op-artalk(T1 6/6、T2 2/2、T3 3/3、T4 6/6);收编复验:build 46 页、
E2E 37/37、四专项 playwright 实测(PDF 13 canvas/斜体 inline/白名单净化/
评论 mounted 标记)

验证: node v26.13.0 + astro 7.4.4 构建 46 页 exit 0;E2E 37/37 PASS

Spec: none (阅读体验四件,车道级交付)

Co-authored-by: GLM-5.3
2026-11-02 15:59:28 +08:00
wait4xandGLM-5.3 328ab68f18 feat(cms): 后台扩展五件——关于页 markdown 化/社交/头像/favicon/分轨首页
- T1 关于页=markdown 文档:about.yaml intro 扩为多段 markdown(zh/en),
  AboutPage 用 @astrojs/markdown-remark 的 createMarkdownProcessor(进程
  内单例复用)+ set:html 渲染,正文 p/ul/strong/a 对齐站点排版;名片与
  技能卡结构不动
- T2 社交链接单一数据源:home.yaml socials[](label/url/icon)+
  SocialLinks.astro(图标注册表白名单:github/rss/email/bilibili/x,
  未登记 icon 回退纯文字),首页 zh/en 内联硬编码社交块删除
- T3 头像与 favicon 可上传:schema avatar: image()(Astro Image 出 60px
  WebP,未设回退渐变 SVG);home.yaml favicon → BaseLayout link[rel=icon]
  按扩展名给 type,留空回退 /favicon.svg
- T4 首页分轨:PostList perTrack → 阅读轨/技术轨两段各限 6,各自出口
  (阅读→/books/ 技术→/archives/,en 同构);E2E 断言改为两段各≤6+各自
  出口+阅读在前
- T5 后台列表日期:posts summary「{{pubDate}} · {{title}}」、moments
  「{{fields.pubDate}} · {{fields.text}}」+sortable;photos 无 frontmatter
  日期(JSON sidecar)保持分组 · 标题并在文档写明原因
- 顺手修 content-lint 漏报:中文文件名在 HTML 里为 %XX 编码,脚本直接
  拼盘上路径导致 6 条"缺图"误报 → 加 decodeURI
- 清理:删除书封误传遗留的双重嵌套目录文件

车道:op-gitea(5/5,build+E2E 37/37+lint 47 页 0/0/0);收编复验:
build 46 页 + E2E 37/37 连跑(首跑两红为车道并发构建擦 dist 的瞬时态,
复跑绿)

验证: node v26.13.0 + astro 7.4.4 全量构建 46 页 exit 0;E2E 37/37;
      content-lint 0/0/0;books details/命令面板 playwright 实测

Spec: none (后台能力扩展,车道级交付)

Co-authored-by: GLM-5.3
2026-11-02 15:46:41 +08:00
wait4xandGLM-5.3 7c1462bde0 fix(admin): 书封上传路径修复——media_folder 相对解析 + Astro 暂留 7.3.8
- Sveltia 对 folder 集合的 media_folder 按"相对集合目录"解析:写成
  content/posts/assets 会二次嵌套成 content/posts/content/posts/assets
  (用户在后台首次上传书封即踩,文件落错位置 + cover 引用缺失 →
  构建 ImageNotFound,发布链中断)。修为 assets,并把已落错位置的
  书封文件移到 content/posts/assets/
- Astro 7.4.4 需要 Node >= 22.23.4,宿主为 22.22.3:升级将锁死 CI
  构建(实测 CI 报 not supported)。本笔回落到 7.3.8 恢复发布链;
  Node 升级后另行升级 Astro(含全链验收)

验证: pnpm astro build 44 页 exit 0;书封图片入 content/posts/assets/
      与文章 cover 路径一致

Spec: none (后台路径修复 + 依赖回滚)

Co-authored-by: GLM-5.3
2026-11-02 15:09:03 +08:00
wait4x f8562510e6 Update 文章 “hai-feng-zhong-shi-luo-de-xie-se-kui-zeng” +1 2026-11-02 06:55:03 +00:00
wait4xandGLM-5.3 f5232b7c03 feat(content): 链接卡片模式——独立成段裸链接转 OG 预览卡
- rehype-link-cards.ts 构建期插件:段落仅含一个链接才转卡(内联链接
  保持普通样式);fetch OG/twitter 元信息(UA 伪装、4s 超时、只读前
  200KB)+ favicon 兜底;任何失败回落普通链接,构建绝不因外部站点挂
- content/.link-cache.json 入仓缓存(30 天刷新,构建确定性与零重复
  请求);单篇上限 10 卡、并发 4,超出回落
- LinkCardStyles.astro 灰阶卡片样式:hairline+圆角、favicon 16px、
  标题一行/描述两行截断、域名 mono、OG 图右侧 88px(无图不占位)、
  hover 1px 微浮(reduced-motion 豁免)、纯 CSS 零 JS
- 安全:抓取内容全 escaping、图片地址仅 http(s)
- @astrojs/markdown-remark 依赖(Astro 7 换默认 markdown 处理器后
  自定义插件必须经此包生效)
- 样张 content/posts/link-cards-test.md(tags 含 hidden,活样例不列出)

修复说明:264148f 提交时误带入 archives 页面对 LinkCardStyles 的
import(两车道共改同一文件),本笔补全组件与插件,恢复构建仓可用。
教训:跨车道共改文件,staged 前必须看 diff 归属。

车道:op-artalk;收编复验:本地构建 45 页 + 卡片渲染(后续专项复验)

验证: pnpm astro build 45 页 exit 0;link-cards 样张页渲染正常

Spec: none (链接卡片,车道级交付)

Co-authored-by: GLM-5.3
2026-11-02 12:46:26 +08:00
wait4xandGLM-5.3 a761cf8129 feat(papers): 论文内置阅读——arXiv iframe 零再分发合规方案
Agensh(arXiv 2609.26781)在线研读页:/papers/agensh/ 双轨薄壳
_PaperView 共享视图+六词条;信息条含标题/作者/abs 链接/授权声明
(arXiv nonexclusive-distrib 1.0,非本站托管)/下载钮。

合规红线:许可证禁第三方再分发→仓内零 PDF 副本,iframe 直嵌
arxiv(实测无 X-Frame-Options);微信 webview 前置 UA 检测加
is-wechat 类、iframe 不挂 src 零无用请求、兜底卡指引右上角浏览
器打开;非微信 data-src 懒挂载+9s 弱兜底+noscript 兜底。正文
入口卡双轨已渲染。

车道:op-gitea(专项四断言+E2E 34/34);收编复验六断言全过
(iframe/授权/微信降级/en/入口卡/零 PDF)

验证: E2E 34/34;微信 UA 模拟 is-wechat=true src 空 提示在;
      git status 零 .pdf

Spec: none (论文阅读页,车道级交付)

Co-authored-by: GLM-5.3
2026-11-02 08:41:39 +08:00
wait4xandGLM-5.3 bbb52b9e24 docs(post): 删除《单人博客的多智能体工程》(用户拍板)
与三篇工具详解定位重叠,用户选择保留详解三部曲。删除为单点
操作:无 en 版、无 translation-state 条目、无他文内链引用;构
建 42 页、lint 43 页 0 违例复验通过。

验证: pnpm astro build 42 页;content-lint 0 断链 0 缺图 0 配对
      警告;dist 无残留页

Spec: none (内容删除,用户决策)

Co-authored-by: GLM-5.3
2026-11-02 08:39:02 +08:00
wait4xandGLM-5.3 8571acdc8b feat(post): 工具三部曲——spec-harness/pi-mesh 全家桶/Agensh 论文笔记
用户直派车道交付:①Spec Harness 详解(任务包解剖+流水线图,
boundary/verify 实例+12 命令+门禁)②pi-mesh 四件套(stack 图+
合奏循环图+上手安装)③Agensh 论文笔记(三支柱/协作环/规模收
益图,DeLM 血统+issue#13→pi-board 诞生线)。七张自绘 SVG、双
语(en 手写直译 locked:true,禁 TMT 覆盖)。与既有 spec-
workflow-and-mesh(实战复盘向)互补并存。

车道:worker-one(build/lint/外链 curl/视觉两轮 7/7 全绿);收
编复验 E2E 34/34+lint 43 页 0/0/0

验证: pnpm astro build 39 文;E2E 34/34;content-lint 0/0/0

Spec: none (内容三篇,直派车道收编)

Co-authored-by: GLM-5.3
2026-11-01 13:35:27 +08:00
wait4xandGLM-5.3 541710b50a feat(post): 单人博客的多智能体工程——spec 与 mesh 实战复盘
四节+结语:19 连发压力日引入 / spec 任务包(blog-5f 实引 verify
原文与已证伪路径)/ mesh 交通规则(契约式下达-预约拦刀实录-守卫
铁律)/ 纪律从事故长出来(验收先探实值-口径错配-五段式运维-视觉
双轨-解封后 SEO 100)。全部数字与命令对档核验。

车道:worker-one(1906 字/schema 过/lint 0 违例);收编补引文精度
(T1 verify 对齐原文四条件)

验证: pnpm astro build 36 页;E2E 34/34;content-lint 0/0/0

Spec: none (内容文章,车道级交付)

Co-authored-by: GLM-5.3
2026-11-01 11:58:42 +08:00
wait4xandGLM-5.3 40346c3f21 fix(books): 泥潭策展语与回退契约实现;自托管仓星标语义
- BooksPage 实现 schema 注释承诺的 description 回退(正文首段去记号
  取 60 字)——视觉复核抓到的"文档说了代码没做"缺口
- 泥潭补人工策展语(回退之上);自托管仓星标改 self-hosted 徽标
  (gitea 无 star 真值,★0 语义突兀——视觉复核次要备注)

验证: build 28 页 exit 0;dist/books 含泥潭策展语;dist/opensource
      self-hosted 徽标与 ★57 并存实测

Spec: 2026-10-25_add-terminal-books-admin

Co-authored-by: GLM-5.3
2026-10-25 13:46:56 +08:00
wait4xandGLM-5.3 3bd8369eda feat(books): 五书策展字段与泥潭作者;顺带入 T1 终端页文件
- schema 加 description/bookAuthor 可选;五书补字段(一句话策展评语
  + 原书作者;泥潭=刘楚昕 用户提供)
- 任务包入 T5 /opensource 独立页(用户追加需求,方案 A 复用扩展)
- 因 add -A 顺带包含 op-artalk 车道已自验 12/12 的 src/pages/terminal.astro
  (T1 交付物,验收随后)

验证: grep bookAuthor content/posts/*.md 五篇命中;schema 可选字段
      对既有构建零破坏

Spec: 2026-10-25_add-terminal-books-admin

Co-authored-by: GLM-5.3
2026-10-25 13:46:56 +08:00
wait4xandGLM-5.3 76b6b6b022 fix(polish): 视觉终审两阻塞+两建议——胶囊真挂载与图注字面量化
- 灯箱:.lb-act class+图标真实挂载(T1 的 python replace 对 i18n 化后
  文案静默失配成死代码——replace 无 assert 的教训);清 560px 媒体
  查询内整段重复规则
- 样张图注:斜体行内裸 <video>/<audio> 字面量化(markdown 渲染成
  真元素:黑盒+吞文字);指南加图注警示
- Artalk 建议项:输入框边界加深一档(--line 白底近不可见);暗色
  发送按钮换深字(白字压浅底 2.4:1 低于 AA)

验证: build 23 页;样张页 video 元素 2→1(幽灵元素消失);
      node tests/e2e.mjs 30/30 PASS;复验图 18/19 待视觉确认

Spec: 2026-10-25_add-media-and-polish

Co-authored-by: GLM-5.3
2026-10-25 12:20:42 +08:00
wait4xandGLM-5.3 80ab3ee3f3 feat(atalk): 评论区美化——CSS 加载缺陷修复与 tokens 主题接管(T2)
- 缺陷修复(op-gitea 车道发现):Artalk JS 不自动注入样式,评论区自
  上线起一直跑 UA 默认样式——mount() 补挂 dist/Artalk.css,onload 后
  init(失败降级不阻塞评论可用)
- 主题接管:18 个 --at-color-* 变量全套映射站点 tokens(var() 引用,
  明暗随 [data-theme] 自动翻转);init 锁 darkMode:false 防双暗叠加
- 气质层:8px 圆角/squircle 头像/时间戳与 UA 转 JetBrains Mono/
  正文链接 underline 纪律/弹层选择器 body 前缀提特异性

验证: build 23 页 exit 0;--at-color-main:var(--accent) 入产物;
      生产页注入同款 CSS 探针矩阵全中(亮 #3454d1/暗 #8ea2ff);
      双态截图 /tmp/e2e-shots/at-polish-{light,dark}.png 待视觉终审

Spec: 2026-10-25_add-media-and-polish

Co-authored-by: GLM-5.3
2026-10-25 12:08:10 +08:00
wait4xandGLM-5.3 aea21c8694 feat(migrate): Halo 全量内容迁移(压缩版)——6文/21图/1瞬间 URL 1:1
- 正文源=线上渲染页(Halo 快照层 patch 残迹:泥潭/赎罪仅 2 字符),
  pandoc html→gfm + tags API 显示名换算后分类:5 书评(五档情绪色)+1 技术
- 图库 21 张:长边 2400/q86 压缩入仓(原图 196M→9.5M——公开仓历史膨胀
  与 nginx 100M 推送上限双杀;原图在 Phase 0 备份 tar 中永久留档)
- 瞬间 1 条;URL 1:1(6 slug 全等,零 301)
- 本提交由 7 个本地提交重写而成(清除已进历史的 196M blob,未推送过);
  因 reset --soft 暂存竞态,一并包含 spec 归档文件
  (.spec/specs/archive/2026-10-24_migrate-blog-content/)

验证: check_urls.py 6==6;astro build 11 页 exit 0(8.67s);
      EXIF 管线跑通;staging 更新;halo healthy+200 全程未动

Co-authored-by: GLM-5.3
2026-10-25 00:39:08 +08:00
wait4xandGLM-5.3 80ff67e8fa feat(content): 三集合 schema 与 EXIF 构建期补全(T4 车道收编)
- src/content.config.ts(Astro 7 唯一合法路径,旧 config.ts 会抛
  LegacyContentConfigError——车道实测发现,经批复的边界修正)
- posts(category→track 派生单源)/moments(text-image 互斥 refine)/
  photos(json sidecar + jpg,exif 构建期 exifr 补全、frontmatter 可覆盖)
- 样例:书评+技术文各 1、瞬间 3、照片 3(横竖方三比例,EXIF 三路径覆盖)
- 附带 scripts/check-responsive.sh(T9 预置,随 T6 产物生效)
- 车道 30min 超时于过度验证循环,产物完好,主会话收编续跑

验证: pnpm astro build exit 0(1.63s,含三集合加载)

Spec: 2026-10-24_add-blog-skeleton
Co-authored-by: GLM-5.3
2026-10-24 23:36:59 +08:00