SuperAPI AI 工具集

report-card

写作与研究

查看项目

更新于 10-16 02:17

技能介绍

用途

report-card 用于把一份已完成的 BS 报告(文件名形如 bs-report-<slug>-<date>.md)渲染成一个任何人都能打开的 HTML 文件。Markdown 仍然是产物本身,也是 tally.py 校验、后续运行 diff 以及提交的对象;本技能只是为同一份文件增加一个面向读者的视图。它只渲染,从不编辑、重新计数或添加内容,页面上的每个数字都逐字复制自 Markdown。

存在的理由:BS 报告是一张五列声明表,在笔记本上尚可,但在手机上(分享链接实际被打开的地方)Evidence 列无法阅读,读者最关心的问题(“哪里有问题?”)需要滚动二十行才能找到关键的两行。

主要能力

  • 评分主视觉:以应有的字号展示分数,按 RUBRIC 分级(Solid / Mostly fine / Hype-heavy / Mostly bullshit / Fabricated)着色,旁边附一行结论。
  • 结论筛选标签:Problems 只显示 ❌ 和 🟠;Load-bearing only 隐藏附带表格。这是让非技术读者能读完报告的关键。
  • 声明展示:宽度低于 900px 时显示为卡片,高于时显示为表格;行、顺序、文本完全一致。
  • 打印样式表:Cmd-P 可生成干净的 PDF,并在每个链接后打印 URL。打印时故意忽略筛选,因为被筛选的 PDF 会悄悄丢掉行,这是本工具绝不能产生的产物。
  • 链接预览标签:粘贴链接时显示 <title> — N/10 和结论行,而不是裸 URL。
  • 托管页面标签:为托管页面输出 <link rel="canonical">、Open Graph、Twitter card 标签以及 Article 结构化数据(需要页面公开 URL)。

使用方式

运行命令:

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> 可指定其他位置。无需安装步骤、无依赖——脚本仅用标准库,既可在 uv run 下运行,也可在普通 python3 下运行,生成的页面不发起网络请求。这一组合使其能在代码执行沙箱中工作,此时 HTML 是用户唯一能带走的东西。

常用选项:

  • --open:在默认浏览器中打开页面。在没有浏览器的地方(沙箱、无头主机)会说明情况,文件仍会写出。若页面已存在则跳过,因为重新渲染是正常的(运行行会在首轮之后最终确定),而每次打开都会新开标签页——连续三次真实运行曾让用户留下两个标签页。文件会原地更新,刷新已有标签页即可。
  • --reopen:即使页面已存在也打开——用于在后续会话中重新拾起报告。绝不要把它当作失败。
  • --quiet:只打印输出路径,便于脚本化。
  • --force:即使未通过合规校验也渲染,并把失败作为警告打印。
  • --no-check:跳过校验门——用于不是 BS 报告的 Markdown。
  • --tally <path> 或 $BULLSHIT_DETECTOR_TALLY:当无法自动找到 tally.py 时指定。
  • --og-image <absolute-url>:添加链接预览图片。仅在页面托管到某处后有用;本地文件请跳过。
  • --canonical <absolute-url>:页面的公开 URL。只要页面有固定地址就传入。不传则页面不输出 canonical,结构化数据中也没有 url。脚本绝不会从 --og-image 或其他任何东西猜测 URL:错误的 canonical 会告诉搜索引擎错误的地址才是真实地址,这比没有更糟。
  • --author <name> 和 --author-type Person|Organization:设置 Article 作者。默认是工具本身,因为本技能为所有人运行;发布时传入自己的名字。

datePublished 来自报告自身的 Checked: 行,绝不来自渲染时间。事实核查若把今天日期盖在上个月完成的工作上,是这份结构化数据绝不能说的,因此读不到日期就不产生日期。

交接块

默认情况下,脚本会打印结束检测器运行的块,例如:

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-click 即可打开。不要缩短为 ~/… 或用链接文本隐藏。

合规门

渲染前,脚本会让报告通过检测器的 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。这正是门的意义:一个如此体面的页面,若建立在未通过自身算术的报告上,会把坏报告洗成看起来权威的东西。修复门指出的问题并重新运行。

如果 tally.py 根本没有安装——本技能可以在没有检测器的情况下安装——脚本会警告并渲染。缺少校验器是警告的理由,不是阻止某人查看已有报告的理由。

规则

  • 渲染,不要重新报告。如果某个数字看起来不对,是 Markdown 错了——在那里修复并重新渲染。绝不要在 HTML 中更正它。
  • Markdown 仍是事实来源。交接文件时要说明这一点;HTML 是视图,只有 Markdown 是 tally.py 校验过的。
  • 不要用 --force 让拒绝消失。门指出的是报告中的真实缺陷。越过它渲染会产生一个比背后东西看起来更可信的页面,而这正是整个工具要捕捉的失败。
  • 未经要求不要发布任何东西。人们会把本工具指向未发表的草稿、内部文档和机密收到的材料。写本地文件不是发布;放到互联网上是属于用户的单独决定,每份报告都要单独决定。
  • 渲染器故意宽松——缺少评分或版本戳的报告仍会渲染,并在页面上注明缺失了哪些字段。这是查看器的职责。tally.py 是严格的那个,两者不能互换角色。

已知限制

  • 声明表必须保持 | # | Claim | Type | Verdict | Evidence | 的形状——# 列是渲染器区分声明表与其他表格的依据,结论字形只从其自己的单元格读取,绝不从行中其他地方读取。
  • 任何语言的报告都能正常渲染(系统字体,无捆绑网络字体)。
  • 此处不生成图片。社交轮播位于 share。

适用场景

当你已经有一份由检测器生成的 BS 报告 Markdown,想把它变成便于分享、手机可读、可打印成 PDF 的单个 HTML 页面时使用。也适合在代码执行沙箱中,用户只能带走 HTML 的场景。

限制

需要报告保持特定的表格形状;渲染前默认要求通过 tally.py 校验(可用 --no-check 跳过);不生成图片;托管页面的 canonical 等标签需要手动提供公开 URL,脚本不会猜测。