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

Doubak / doubak-data-specs
54%

Build:
DEFAULT BRANCH: main
Repo Added 23 Aug 2026 02:58AM UTC
Files 2
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
  • main

04 Sep 2026 07:10AM UTC coverage: 54.048% (+0.8%) from 53.285%
37

push

github

MewX
bundle/1.4:只关于一个 URL 的缺口,要把那个 URL 写成字段

真实档案 20260903T232811Z-b3c2b6 里的一句假话:crawl_state 写着
「…f042d8249db3650.jpg:重试 3 次仍失败」,而同一份档案的索引里就躺着那条
verdict=ok、542163 字节的捕获。用户点了「重试」,这一次成功了,而缺口只增
不减,于是 contiguous=false 被封了进去。**档案是全的,声明是错的**,而档案
冻结之后这句话再也改不了。

1.4 之前,那个 URL 只出现在 detail 那句给人看的话里,对机器不可用——而有
两件事恰恰需要它可用:

- 生产者要能收回自己的话(重试成功就地抹掉那处缺口);
- 读者要能本地证伪(带 url 的 fetch_failed 缺口,若索引里有同一 url 的
  verdict=ok 捕获,就是自相矛盾)。

后者与 §2「不得用 claimed_count 授予完整性」是同一条不对称原则的另一面:
**授予要严,证伪可松**——何况这里用来证伪的还是生产者自己写下的另一句话,
不需要相信豆瓣的任何数字。

写 url 的条件是「这处缺口确实只关于这一个 URL」。aborted、no_items_observed
说的不是某一个 URL,不得写,否则一次不相干的成功会把它抹掉。

**校验器故意不去解析 detail 里的 URL。** 1.3 及更早的缺口只有 detail,靠
子串把 URL 抠出来,判错的方向是「悄悄放过一处真缺口」或者「诬告一处真实的
失败」——两个都比漏报贵。

- common.schema.json:gap 新增可选 url;current_spec_version → bundle/1.4
- SPEC.md:§5 新增一节,§10.1 补版本行
- validate.py:新增那条证伪检查(**合规性**,不是完整性——字节是好的)
- tests/invalid/gap-already-captured:把它做成一致性用例;去掉检查会让
  用例套件变红,所以它不是空判据

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

8 of 9 new or added lines in 1 file covered. (88.89%)

227 of 420 relevant lines covered (54.05%)

0.54 hits per line

Relevant lines Covered
Build:
Build:
420 RELEVANT LINES 227 COVERED LINES
0.54 HITS PER LINE
Source Files on main
  • Tree
  • List 2
  • Changed 1
  • Source Changed 1
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
37 main bundle/1.4:只关于一个 URL 的缺口,要把那个 URL 写成字段 真实档案 20260903T232811Z-b3c2b6 里的一句假话:crawl_state 写着 「…f042d8249db3650.jpg:重试 3 次仍失败」,而同一份档案的索引里就躺着那条 verdict=ok、542163 字节的捕获。用户点了「重试」,这一次成功了,而缺口只增 不减,于是 contiguous=false 被封了进去。**档案是全的,声明是错的**,而档案 冻结之后这句话再也改不了... push 04 Sep 2026 07:15AM UTC MewX github
54.05
36 main feat: 校验器把完整性与合规性分开,并真的核一遍 content_sha256 bundle 一旦产出就冻结,所以合规性错误里有一部分**永远修不掉**:实测 24 份 真实档案里有 4 份因为一个早已修好的生产者 bug 永远报 45 个错。混在一列里, 那 45 条会把一条真的字节损坏挤到屏幕外面——而一个永远有内容的失败列表就是 一个没人看的失败列表。这正是这个校验器一直没人跑的原因。 于是分两类,退出码也分两类: 0 干净 1 只有合规性错误(字节是好... push 30 Aug 2026 11:27AM UTC MewX github
53.28
35 main IDENTITY §2.4:两层身份混在一起时必须归并,不得各成一条 §2.3 说的是「一次观测怎么定层」,缺了一句「同一条标记的不同观测分属不同层时 怎么办」。而按 §2.2 那张表,这不是罕见情形是必然情形:2023-12 之前抓的页面一律 没有 data-cid,所以只要一个目录里同时有那条线两侧的档案,每一条跨越那条线的 标记都会遇到它。 解析器照字面实现,做成了两个不相交的键空间,于是一条标记裂成两条记录。实测把 前代工具 2022-12 → 2024-08 的档案导进来:2... push 30 Aug 2026 04:40AM UTC MewX github
53.31
34 main bundle/1.3:capture_fidelity 多一个取值,给「正文是真的、头部是编的」 第三方抓取工具存到磁盘上的往往只有 HTML 正文:没有响应头,没有状态码。要把 这些页面转成 bundle(doubak-import-adapters 正在做的事),WARC 的 response 记录结构上必须有个响应块,于是导入器只能现编一个状态行和几行头。 现有三个取值一个都不合适,而最省事的那个也最错:filtered_headers 宣称头部 来自 fetch(),也就是来自... push 30 Aug 2026 04:26AM UTC MewX github
53.31
33 main 校验器指到不存在的目录时说「全部通过」,改成报错 `validate.py /tmp/打错的路径` 原先会印五行「不存在,跳过」,然后一句 **全部通过**、退出码 0。打错一个路径就拿到一句绿灯,而它一行都没读到。 这正是这个项目一路在防的那种东西:**一个不可能失败的检查,对它本以为在 检查的那件事什么也没证明。** 现在分两种情况报错并以 2 退出——目录不存在, 以及目录在但一个 canonical 文件都没有(那是「你指错地方了」, 不是「你的数据没问题」)。 顺带把 RE... push 25 Aug 2026 11:13AM UTC MewX github
53.31
32 main 覆盖率上报 Coveralls:自己拼 payload,不引第三方 action 用 repo token 打 /jobs 端点,不用 coverallsapp/github-action(它只认 github-token,还要把 @coveralls 以 Role: Write 请进仓库)。 用 --source 而不是 --include:coverage.py 会把 --source 里从没被执行过的 文件按 0% 报出来,而 --include 会让它们干脆不出现。这正是这个仓... push 23 Aug 2026 04:16AM UTC MewX github
54.52
See All Builds (6)
  • 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