mcpField
R
report-card

report-card

github.com/serhiikorniienko文档处理16048 次安装4 周前更新
代码仓库

关于 report-card

report-card 将 Bullshit Detector 的 Markdown 报告转换为单个 HTML 阅读页面,也适合手机查看。它保留 Markdown 作为事实来源,并在渲染前用 tally.py 检查报告。

主要功能

  1. 01将 Markdown 报告渲染为独立 HTML
  2. 02渲染前使用 tally.py 验证报告
  3. 03添加评分、判定筛选和自适应声明卡片
  4. 04提供打印样式和链接预览元数据
  5. 05支持本地浏览器打开及静默脚本模式

适用场景

  1. 01分享便于阅读的事实核查报告页面
  2. 02打印带链接的报告 PDF
  3. 03仅查看有问题或关键声明

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/serhiikorniienko/bullshit-detector --skill report-card

安装后在 Claude Code 中输入/report-card确认已加载。

附带文件scripts/render_report.pyVERSION

详细介绍

report-card

将 bs-report-<slug>-<date>.md 转换为任何人都能打开的单个 HTML 文件。

Markdown 是产物,并且始终是产物——tally.py 会检查它,后续运行会与它进行差异比较,它也会被提交。此工具为同一文件添加面向读者的视图。它只负责渲染,不会编辑、重新计数或添加内容。页面上的每个数字都原样复制自 Markdown。

为什么需要这个工具

BS 报告是一张五列的声明表格。在笔记本电脑上,这没问题。但在手机上——人们实际打开分享链接的地方——Evidence 列无法阅读,而读者的第一个问题(“哪里有问题?”)意味着要滚动查看二十行,才能找到最重要的两行。

用法

uv run <this-skill-dir>/scripts/render_report.py ~/.bullshit-detector/reports/<YYYY>/bs-report-<slug>-<date>.md

会在 Markdown 文件旁写入 bs-report-<slug>-<date>.html。-o <path> 可将文件写到其他位置。无需安装步骤,也没有依赖项——脚本仅使用标准库,在普通的 python3 和 uv run 下都能运行,而且生成的页面不会发出任何网络请求。正是这些特性让它能在代码执行沙箱中运行;在沙箱里,HTML 是用户唯一能带走的内容。

  • --open 会在默认浏览器中显示页面。如果没有浏览器——例如在沙箱或无头主机上——它会说明情况,但仍会写入文件。如果页面已存在,则会跳过此操作,因为重新渲染很常见(首次处理后才会最终确定运行行),而每次打开都会新建一个标签页——连续实际运行三次后,用户就有了两个标签页。文件会原地更新;重新加载已有标签页即可。
  • --reopen 即使页面已存在也会打开,适用于在之后的会话中重新查看报告。切勿将此视为失败。
  • --quiet 只打印输出路径,便于编写脚本。

交接信息块

默认情况下,脚本会打印检测器运行结束时使用的信息块:

BS score 4/10 · Mostly fine
  the macro data is real and mostly checks out; the narrative glue is crypto-Twitter.
Tally: 35 claims extracted, 34 individually source-checked — 22 confirmed, 5 plausible,
  5 misleading, 2 false. 1 not checked.
run: 16m30s, searches 35, tools 65, coverage 1, per claim 29s

markdown  file:///Users/…/bs-report-japans-money-is-collapsing-2026-07-31.md
page      file:///Users/…/bs-report-japans-money-is-collapsing-2026-07-31.html
          opened in your browser

直接粘贴,不要重新整理。 所有数字都来自 tally.py 刚刚重新统计的报告。凭记忆重写你所写内容的摘要,会导致结果偏向美化本次运行——这与 tally 和搜索次数的错误模式相同,只不过更进了一层。

这些路径故意使用 file:// URL:终端会自动将裸 URL 转为链接,因此只需按住 Cmd 并单击,就能打开这两个文件。不要将它们缩短为 ~/…,也不要用链接文本隐藏它们。

合规检查

渲染前,脚本会使用检测器的 tally.py 检查报告,并且拒绝渲染未通过检查的报告:

REFUSED: bs-report-our-solar-system-2026-07-31.md does not pass tally.py.
  ✗ run line: 25 claims individually source-checked from 21 searches — every claim
    carrying a verdict needs its own search, so this reports more verification than
    was performed

退出码为 3。这正是设置检查关卡的目的:如果报告本身的算术有误,却用它生成一个如此精致的页面,就会把一份有问题的报告包装成看似权威的内容。修复检查指出的问题,然后重新运行。

  • --force 会忽略检查结果并继续渲染,同时将问题作为警告打印出来。
  • --no-check 会跳过检查关卡——适用于并非 BS 报告的 Markdown。
  • 如果无法自动找到 tally.py,可使用 --tally <path> 或 $BULLSHIT_DETECTOR_TALLY 指定其路径。

如果根本没有安装 tally.py——此工具可以在未安装检测器的情况下单独安装——脚本会发出警告并继续渲染。验证器缺失应当作为警告,而不是阻止他人查看已有报告的理由。

--og-image <absolute-url> 会添加链接预览图。只有在页面托管到某处后才有用;处理本地文件时请跳过。

托管页面的标签

对于托管页面,脚本还会输出 <link rel="canonical">、Open Graph 和 Twitter 卡片标签,以及 Article 结构化数据。为此,它需要页面的公开 URL:

  • --canonical <absolute-url> 即为该 URL。只要页面有固定地址,就传入它。
  • 如果不传入,页面就不会包含 canonical,也不会在结构化数据中包含 url。脚本绝不会从 --og-image 或其他内容中猜测 URL:错误的 canonical 会告诉搜索引擎错误的地址才是真实地址,这比不设置更糟。

--author <name> 和 --author-type Person|Organization 用于设置 Article 作者。默认作者是工具本身,因为这项技能面向所有人运行;发布时请传入你自己的姓名。

datePublished 取自报告自身的 **Checked:** 行,而不是渲染时间。对上个月完成的工作盖上今天的日期,是这份结构化数据绝不能做的事,因此如果无法读取日期,就完全不写日期。

然后告知用户文件路径,并说明可在任意浏览器中打开。在 macOS 上,运行 open <path> 即可打开。

页面相比 Markdown 增加的内容

  • 分数主视觉 — 按照它应有的字号展示分数,并根据 RUBRIC 档位着色(可靠 / 基本没问题 / 夸大其词 / 大多胡说 / 捏造),旁边附上一句话结论。
  • 结论筛选标签 — Problems 仅显示 ❌ 和 🟠。Load-bearing only 会隐藏次要表格。这是让非技术读者读完报告的关键。
  • 主张在 900px 以下显示为卡片,超过该宽度则显示为表格。行数、顺序和文本均保持不变。
  • 打印样式表 — 按 Cmd-P 可生成整洁的 PDF,并在每个链接后打印 URL。打印时会有意忽略筛选条件:经过筛选的 PDF 会悄悄漏掉行,而这是此工具绝不能生成的产物。
  • 链接预览标签 — 粘贴链接时,会显示 <title> — N/10 和结论行,而不是裸 URL。

规则

  • 渲染,不要重新报告。 如果某个数字看起来不对,说明 Markdown 有误——在 Markdown 中修正后重新渲染。绝不要在 HTML 中修正。
  • Markdown 仍然是事实来源。 交付文件时要说明这一点;HTML 只是视图,只有 Markdown 经过了 tally.py 验证。
  • 不要试图用 --force 绕过拒绝。 门禁指出的是报告中的真实缺陷。强行渲染会生成一个看起来比底层内容更可信的页面,而这正是此工具要防止的问题。
  • 未经请求,不要发布任何内容。 用户可能会把未发布的草稿、内部文档和他人私下发送的内容交给此工具处理。写入本地文件不算发布;将其放到互联网上是另一项决定,应由用户针对每份报告作出。
  • 渲染器有意保持宽松——即使报告缺少分数或版本标记,仍会渲染,并在页面上注明缺少哪些字段。这是查看器的职责。tally.py 才负责严格校验,两者不得互换职责。

已知限制

  • 主张表格必须保持 | # | Claim | Type | Verdict | Evidence | 的结构——渲染器通过 # 列识别主张表格,而结论标记只会从其自身单元格读取,绝不会从该行的其他位置读取。
  • 任意语言的报告都能正常渲染(使用系统字体,不包含捆绑的 Web 字体)。
  • 此处不会生成图片。社交轮播图位于 share。

评论

支持 Markdown