Skip to content

v2.1.0 — 让两侧看到同一份东西

Choose a tag to compare

@github-actions github-actions released this 01 Sep 09:54
· 35 commits to main since this release

这一版起于一次真实的文献雷达跑:五篇自有论文做我方论文,一个全新项目,一路
走完收割、分诊、引文缺口。判定标准只有一条——程序造成的「不同的人看到不同
的东西」要修;同一份信息下的判断差异不算 bug。

按这条筛出十四处。

静默地少做你配置的事

arXiv 分类饥饿。 _apply_budget 按来源家族分名额:arxiv-new 一共拿
max_candidates // 2,而每个分类抓 30 篇——第一个分类一个人就超额。后面的
分类被真的抓下来(各一次 HTTP 往返、三秒礼貌等待),然后整段丢掉,而日志
写的是「harvesting arXiv listings (3 categories)」。实测配三个分类,20 篇
arXiv 候选全来自第一个;修后是 7 / 7 / 6。

没有种子时,推荐那条腿静默关闭。 harvest_s2([]) 直接返回空,日志照样
打「harvesting S2 recommendations」。config 的注释明写着种子可留空,所以一个
只填了 own_arxiv_ids 的新项目拿到的是「只有 arXiv 最近列表」——而实测里,
值得读的四篇全部出自推荐那条腿。

两个说法发给同一个读者

每份雷达简报的正文里写死了「file bd issues」和「set status: reviewed in
this file's frontmatter」,而 radar_review 的规则是用 magi radar triage
禁止手改 frontmatter。agent 读到哪个就照哪个做。横幅改成引 skill 的
命令,并加了守卫:横幅里出现的每条 magi 调用,skill 里也必须出现。

两侧数不到一起

  • magi radar triage --done —— mark_report_reviewed() 原来只有 WebUI
    调得到,所以不开面板的人记完四十条决定,status / next / sync 仍然
    永远说待审。它还会自己报「N of M decided」并点名没判的那些:那本来是 skill
    里要人凭记忆说出口的一条散文规则。
  • 引文缺口按论文分组。 每个(我方,对方)配对各占一个标题,于是同一篇
    解析成多个同 id 的候选,而 triage --id 只认第一个——决定记了一次,列表里
    仍显示未决。头部 candidates: 18 其实是 11 篇;现在同时给出 papers 和
    pairs。
  • 面板和 CLI 对「有几条能判」给同一个数。 引文缺口报告开头的
    ## Our paper: 段被候选解析器读成候选,面板给它建了按钮全返回 409 的行,
    进度条永远停在 11/12。
  • --id 可重复,同一决定一次打完;批量里有一个坏 id 就一条都不写。
  • 决定词表写下来一次。 面板的「建阅读任务」记的是 task,CLI 三档里
    没有,注释还写着「the same three words」。

信息缺失当成解释

  • 引文缺口现在标出当天已判过的候选,而不是隐藏——共享参考文献列表是简报
    没有的证据,实测最强的一条命中正是「看摘要被跳过、看参考文献值得复议」。
  • 我方论文的元数据被限流(HTTP 429)时,那个锚点的上下文段不再直接消失,
    缺的地方自己说明缺了什么。
  • magi search 在空项目上回答而不是报错。「没有索引」一个错误当了两个
    答案用:有内容没索引确实答不了;什么都没有的项目,零结果才是真答案。空与
    不空问 _iter_corpus,也就是 magi index 自己走的那张表。

注册表

magi kb prune —— magi index 每次都自动注册,而没有任何东西会注意到
目录被删了。一台真机上 350 条,其中 225 条指向不存在的目录,4 条是人的项目。
kb list 一直算得出 exists 并打 MISSING,只是没有命令能据此动手。判据是
「目录没了」这个文件系统事实,不是名字像不像测试。

而它的来路也修了:测试套件在往开发者自己的 registry.json 里写。 隔离
夹具是 function 作用域,三个 module 作用域的夹具跑在它之前、继承了真实环境。
实测一次全量把注册表从 5 条推到 8 条。会话级夹具先重定向,并在重定向之前读
一遍真实注册表、结束时比对字节——任何将来的写入让整轮变红。

CI 真的在跑它声称跑的东西

  • textlayer extra 现在装上了。 它声明了、两个 workflow 都不装,需要它
    的 10 个测试只在作者机器上跑过。而没跑过的那条路是坏的:_run_route 只查
    verdict.ok、忽略 verdict.available 就 import,于是普通安装上一个正文
    PDF 的失败原因写成了 ImportError: No module named 'pymupdf4llm'——一句
    关于打包方式的话,说给一个只想转换论文的人听。
  • Windows 上 bd 装了、查了,套件却看不见。 检查跑在 Git Bash 里,而
    $HOME/.magi-bin 写进 GITHUB_PATH 是 POSIX 路径;跑套件那步是 pwsh。
    15 个测试在 Windows 上从未跑过。检查改成向真正要去找它的那个解释器发问。
  • 新守卫:声明的每个 extra 都必须在跑套件的地方装上。

也修了

radar_review 多一条规则(逐条判定,不拿上一条的推理当依据)。
browser-extension 的 README 还在教两条已退役的命令。
一个装满 LaTeX 宏的非 raw docstring——\r 是真回车。
onnxruntime 不加上界的理由记进了 pyproject:1.28 自己把 requires_python 提到

=3.11,解析器在 3.10 地板上本来就不会选它。

质量

2687 个测试,三平台一致(此前 Windows 少跑 15 个、三平台各少跑 10 个)。
56 条变异用例全部会咬。三宿主冒烟于 2026-09-01 通过:复核者驳回了一个故意
过宽的命题并逐行点名,19.5 秒。

pipx upgrade --install magi-research

Browser buttonmagi-browser-extension-v1.2.2.zip below.
Unzip it, open chrome://extensions, turn on Developer Mode, and use Load unpacked on the unzipped folder. It sends the page you are reading to a local MAGI queue and nothing else; nothing enters a library until you approve the batch.