• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Doubak / doubak-site-generator
89%

Build:
DEFAULT BRANCH: main
Repo Added 23 Aug 2026 02:59AM UTC
Files 11
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH main
branch: SELECT
CHANGE BRANCH
x
  • No branch selected
  • browser-pages
  • main

04 Sep 2026 10:05AM UTC coverage: 88.991% (+0.2%) from 88.791%
41

push

github

MewX
删掉再重标:一个作品仍然只有一页,旧的那次不许消失

《盗梦空间》2018-01-03 标过一次,2026-09-04 用户在豆瓣上删掉重标。豆瓣发了个新的
条目 id(1299196346 → 4937138397),解析器据此如实分成两条记录——那是对的,
canonical 是事件日志,两个不同的上游 id 就是两次不同的标记。

而投影这一层一处判据都没有,于是两个各自静默的毛病:

1. **后写的把先写的整个盖掉。** 两条标记算出同一个文件名,先来后到决定谁活下来。
   git 上看不出来——页数没变、没有新增没有删除,只在那一页的 diff 里。2018 年的
   短评与标签就这么从站点上消失了。
2. **`targetIndex` / `broadcastsBySubject` 把它判成「id 撞车」**,于是两条广播的
   链接与封面一起消失,作品页上整个「说过什么」栏目也没了——而那正是这份档案最
   不可替代的部分:豆瓣自己已经不显示 2018 年那条了。

第二条又是一个**代理**:「同一个 id 出现两次」在只有一条标记的年代恰好等价于
「跨媒介撞车」,而用户第一次删掉重标就让两者分了家。规则本来要问的是「媒介一样
吗」,同一部电影的两条标记指向的是同一页,根本没有歧义。

修法是在投影入口按「媒介:作品id」归组(`mergeReMarks`):

- 页头取**最后一次看到**的那条——豆瓣现在还留着的,才是最近一次抓取里出现过的。
  按 marked_at 挑是错的:补标一部老片可以有更早的日期,而它仍然是现存的那条。
- 被顶掉的那几条**并进时间线**,所以 2018 年那次的短评、评分、日期都还在页面上,
  位置也对,而不是假装从没发生过。
- revisionCount 把它们都算上,否则页面会说「只有 1 个版本」,而下面的时间线明明
  列着两次标记。

归组之后 `targetIndex` 里那个撞车判断就只可能是跨媒介的了,所以它**保持原样**并
把这条上游保证写进注释——加一次「媒介是否相同」的比较永远为真,一个永远为真的
判断读起来像在防什么,实际什么都没防(突变验过:改了它一条测试都不红)。
`broadcastsBySubject` 读的是原始 canonical,那一处的判据是真的要改。

顺带:首页广播预览 2 条 → **5 条**,与长文的 PREVIEW 分成两个常量。广播是首页上
唯一能看见原话的地方(媒介小节是封面墙,长文是标题加 80 字摘要),而长文一条就
占掉一屏,共用一个数必然连累另一个。

新增 6 条测试,6 个突变逐个验过。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E6dxwcUi4rM3dcKdsqx9xm

421 of 540 branches covered (77.96%)

Branch coverage included in aggregate %.

109 of 109 new or added lines in 2 files covered. (100.0%)

2497 of 2739 relevant lines covered (91.16%)

23.61 hits per line

Relevant lines Covered
Build:
Build:
2739 RELEVANT LINES 2497 COVERED LINES
23.61 HITS PER LINE
Source Files on main
  • Tree
  • List 11
  • Changed 3
  • Source Changed 2
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
41 main 删掉再重标:一个作品仍然只有一页,旧的那次不许消失 《盗梦空间》2018-01-03 标过一次,2026-09-04 用户在豆瓣上删掉重标。豆瓣发了个新的 条目 id(1299196346 → 4937138397),解析器据此如实分成两条记录——那是对的, canonical 是事件日志,两个不同的上游 id 就是两次不同的标记。 而投影这一层一处判据都没有,于是两个各自静默的毛病: 1. **后写的把先写的整个盖掉。** 两条标记算出同一个文件名,先来后到决定谁活下来。 g... push 04 Sep 2026 10:06AM UTC MewX github
88.99
40 main docs: README 说清「缺」与「读不出来」是两回事 以及一张图坏掉不再让整趟生成失败,和提前查出来该跑什么命令。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E6dxwcUi4rM3dcKdsqx9xm push 30 Aug 2026 11:27AM UTC MewX github
88.79
39 main fix: 封面接不回本地就不写,绝不回退到 doubanio 的 URL `markPage` 里写的是 `douban_cover: coverPath ?? m.coverUrl`,而这一句与同一个 文件里说了三遍的规矩正好相反(广播的作品链接、被截断的全文、广播卡片上的名字, 全都写着「不回退到豆瓣」),也与 projection.js 里 realCover() 那二十行注释直接 冲突——那里说的正是「原样带过去的话,页面上会留一个指向 doubanio 的 URL,那让 一份号... push 30 Aug 2026 05:31AM UTC MewX github
88.74
38 main fix: 没有时间的广播不能编一个日期,否则 Hugo 整站构建失败 `monthOf()` 早就为「没有 posted_at」准备了一个哨兵值 '未知',但没有一个消费它的 地方认得它:`'未知'.split('-')` 得到 `['未知']`,于是 `Number(undefined)` 是 NaN, 标题成了「未知年NaN月」,front matter 里写出 `date: "未知-01"`—— ERROR the "date" front matter field is... push 30 Aug 2026 05:13AM UTC MewX github
88.68
37 main docs: 记下为浏览器扩展做的两处拆分 扩展的「导出」页出的 Markdown 树用的就是这里的 pages.js / image-index.js。 README 说清界线,以及为什么这次拆分不是洁癖——不拆的话扩展那边只能照着字段名重写 一遍那套判定,而我写出来的版本三处全错、三处都不报错。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/se... push 28 Aug 2026 04:04AM UTC MewX github
88.4
35 browser-pages docs: 记下为浏览器扩展做的两处拆分 扩展的「导出」页出的 Markdown 树用的就是这里的 pages.js / image-index.js。 README 说清界线,以及为什么这次拆分不是洁癖——不拆的话扩展那边只能照着字段名重写 一遍那套判定,而我写出来的版本三处全错、三处都不报错。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/se... push 28 Aug 2026 03:57AM UTC MewX github
88.4
34 main README 里的数全部重新量过:档案从 2940 条走到了 2950 条 这些数都是量出来的,而且**变旧的时候不出声**。对着当前档案 (20260820-canonical,17 份 bundle)重跑了一遍 md 和 site: 页面 3098 → 3132 标记 2940 → 2950 广播 3394 → 3411 图片 3045 → 3063 Hugo 3803 → 3834 页 HTML 4596 → 4794 影视 2102 → 2... push 25 Aug 2026 11:16AM UTC MewX github
87.95
33 main 覆盖率上报 Coveralls:自己拼 payload,不引第三方 action 用 repo token 打 /jobs 端点。不用 coverallsapp/github-action:它只认 github-token,还要求把 @coveralls 用户以 Role: Write 请进仓库来发 PR 状态。 脚本存在的主要理由是**合并重复的 SF 段**。Node 内置的 lcov reporter 每个 工作进程各写一份、互不合并:扩展仓库实测 133 条 SF 记录、去重后... push 23 Aug 2026 04:13AM UTC MewX github
87.95
See All Builds (8)
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc