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

Doubak / doubak-data-parser / 29
91%

Build:
DEFAULT BRANCH: main
Ran 30 Aug 2026 11:59AM UTC
Jobs 1
Files 15
Run time 1min
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

30 Aug 2026 11:58AM UTC coverage: 91.238% (-0.9%) from 92.12%
29

push

github

MewX
fix(test): 三条断言把「豆瓣改了渲染」当成了「用户改了内容」

把前代工具 2022–2024 的档案并进来之后,三条长期为绿的断言红了。**三条都是
断言错了,数据是对的**,而且是同一个错误的三种大小。

**① 墓碑的 title 必须全是 null。** 实测 8 个墓碑里有 3 个留下了真名——
movie/11611021「在这世界的角落」、game/24299254「瘟疫公司」、
game/27054820「瘟疫公司:物竞天择」:老档案在豆瓣删掉它们**之前**看见过。
墓碑不是「一直无名」,是「变成了无名」,而一份看着它发生的档案正是目的本身。
改成:最新那一版必须是 null(「未知电影」是占位符,放进去会一路传到页面
标题与导出文件),更早的可以有名字,且恢复出来的个数写成**下界**——写成
恒等会让「多救回一个名字」表现成测试失败。

顺带纠正 CLAUDE.md 里那句「0 of 8 不可恢复」:那是从唯一看过的那个例子
(《返校》,它确实 2022-12 就已经是「未知条目」)推广出来的,n=1。

**② canonical 引用的图 == 档案里抓到的图。** 前代工具只存 HTML,一张图都
没存,所以导进来之后 20 个 URL 天然没有字节。这不是判据不一致。拆成三条:
真抓过的档案引用的必须有字节(132 == 132,严格相等,抽取器变松照样红);
抓到的每一张都必须被引用(0 孤儿,全档案无例外,抽取器变严照样红);
只被重建档案引用的必须**一张字节都没有**——把缺口说出来而不是放过去,
因为哪天它有了字节,上面那个划分就不成立,而第一条会静悄悄失去意义。

判据取 `capture_fidelity === 'decoded_body+synthesized_headers'`,不取
producer 的名字:那个值是 bundle/1.3 专为「重建出来的档案」新增的,按名字判
会在第二个导入适配器出现时失效,且会以「抽取器松了」的名义报错——归错因。

**③ 广播里用户写的那部分不可编辑。** 这条上次已经收窄过一回(target_title
移出去)。这次又有四个字段动了,而**没有一个是用户改的**:

    action  59 对  49 对只差冒号宽窄(老页面「说:」新页面「说:」,每个带冒号
                   的动作都恰好两种写法、按来源完全分开、零反例);另外 10 对
                   是豆瓣改了措辞,例如「分享了」→「转发了」
    text     9 对  4 对 \r\n\r\n 被压成 \r\n · 1 对 ™ 与 ™
                   的转义差别 · 3 对是老页面的正文这边读不出来
    images  27 对  老页面上 upload-pic-wrapper 那种附图还没认出来
    target_type / target_id 各 4 对

「发出去就不能改」说的是**用户改不了**,从来没有承诺豆瓣四年不换模板。写进
同一张表,就是拿豆瓣的排版变化去指控用户编辑了广播。真正冻住的只剩五个,
实测在全部 3856 条修订里一次都没变过:posted_at · rating · status ·
text_truncated · full_text_url。

被移出去的不是不管了,是改成**上界**:直接删掉等于把「豆瓣渲染变了」与
「抽取器坏了」一起放行,而后者正是这条测试存在的理由。认出老页面的附图写法
会让 images 那个数下降(绿),任何新的抽取器退化都会让它上涨(红)。

**④ 顺带:`--test-concurrency=2`。** 4 个测试文件各自完整解析一遍那份 619 MB
的真实档案,而 `node --test` 默认按核数并发——8 核上就是 8 份同时跑,实测会把
整个文件**整体**打挂,报出来只有一句没有断言的 `'test failed'`。单独跑又是
绿的,于是表现为「时好时坏」。限并发之后 215 个测试全绿。

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

511 of 642 branches covered (79.6%)

Branch coverage included in aggregate %.

3352 of 3592 relevant lines covered (93.32%)

2562.93 hits per line

Coverage Regressions

Lines Coverage ∆ File
30
87.04
-3.71% src/parse.js
Jobs
ID Job ID Ran Files Coverage
1 29.1 30 Aug 2026 11:59AM UTC 15
91.24
GitHub Action Run
Source Files on build 29
  • Tree
  • List 15
  • Changed 9
  • Source Changed 0
  • Coverage Changed 9
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 59fe7174 on github
  • Prev Build on main (#28)
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