fix(moments): 评论流键从 #<slug> 改为虚拟路径,避免键被截断

实测发现 `#` 在查询串里是 fragment 分隔符:裸传 `/moments/#2026-11-02` 会被服务端
截断成页面级键 `/moments/`(生产 Artalk 实测,响应里 key 变成 "/moments/"),
后果是所有瞬间共用同一个评论流、pv 也串在一起。

- page_key 改为虚拟路径 `/moments/<slug>/`(生产实测键原样保留,零转义风险;
  将来真做单条瞬间页时键天然对齐)
- spec 与 runs.jsonl 口径同步(七项 verify 在新指纹下重跑全绿)

验证: 构建 51 页 exit 0;产物含 /moments/2026-11-02/ 键;content-lint 0/0/0;
      spec_verify 七项 exit=0;check 收敛

Spec: 2026-11-02_blog-5h-content-social (T3 修正)

Co-authored-by: GLM-5.3
This commit is contained in:
wait4xandGLM-5.3 committed 2026-11-02 21:05:51 +08:00
1 parent 550f6d15b4
commit c7d1e7b975
4 files changed
+16 -6

No files matched your search

+7 -4
View File
@@ -6,8 +6,11 @@
* 都白付;Artalk 官方也未背书"同页多实例长期并存"。于是「展开才挂」是折中:
* 读者点了才付成本,未点零开销(连 Artalk.js 都不下载)。
*
* 评论流约定:`page_key = /moments/#<slug>`,**中英双语共用同一键**(评论不分裂,
* 与文章页 `/archives/<slug>/` 双语共用同理);site 恒为 wait4x.online。
* 评论流约定:`page_key = /moments/<slug>/`(虚拟路径),**中英双语共用同一键**
* (评论不分裂,与文章页 `/archives/<slug>/` 同理);site 恒为 wait4x.online。
* 为什么不用 `#<slug>` 形态:`#` 在查询串里是 fragment 分隔符,裸传会被服务端截断成
* 页面级键 `/moments/`(实测),届时所有瞬间会共用同一个评论流、pv 也串在一起。
* 虚拟路径既无转义风险,将来真做单条瞬间页时键也天然对齐。
*
* 计数不在这里自己 fetch:复用 geek/ViewMeta(mode="readonly" 只读,不写 pv),
* 放在卡片底部让读者不开评论也能看见条数。
@@ -24,8 +27,8 @@ interface Props {
const { slug, locale = 'zh' } = Astro.props;
/** 评论流键:双语共用;`#<slug>` 与文章页 page_key 形状保持一致的可读性 */
const pageKey = `/moments/#${slug}`;
/** 评论流键:双语共用的虚拟路径(形如 /moments/2026-11-02/),无转义风险 */
const pageKey = `/moments/${slug}/`;
/** 容器 id 只允许 CSS 安全字符(slug 理论上是文件名,仍兜一层) */
const panelId = `mom-atk-${slug.replace(/[^a-zA-Z0-9_-]/g, '-')}`;
const label = t('moment_comments', locale);