Claim 起草 + issue 提交迁回上游 lean 仓,退役 QA client claim 插件¶
取代 ADR 0005。
Claim 起草和 type/theorem issue 提交 从 QuantumAtlas client 迁出,进入上游 lean 仓
(agony/qatlas-lean)。ADR 0005 中作为 QA 侧 localhost 插件发布的内容(qatlas contrib claim —— 位于 qatlas/client/claim/ 下的 Copilot/anthropic/openai-SDK 起草器 + WebUI)
退役:保留为随包分发的一方 builtin 插件,但默认关闭,只能通过配置驱动的 plugins 列表启用
(见下文"插件平台如何保持通用");qatlas-lean 现在以自己的 qatlas-lean contrib claim <paper> localhost WebUI 提供等价流程,由 qatlas-lean 的 CLI flat-agent runner(copilot -p --agent claim-drafter)驱动,不是 SDK。
QuantumAtlas 只保留它已经承担的角色:文献托管方(通过 GET /api/papers/{id}/markdown
提供 paper Markdown,并通过 GET /api/papers/lookup 解析引用,见 ADR 0007),以及已证明
Theorems 的 theorems 拉取插件消费者(ADR 0002)。qatlas-lean 现在是这些只读端点的
client。
为什么迁到 lean¶
一个仓库拥有完整的 prover 侧界面。 Claim 起草 → 证明(solver)→ 审计(三贤者)→ 注册表/账本现在全部在
qatlas-lean。贡献者只需阅读一个仓库,"所有 Lean 相关内容"有唯一归宿 ——这与 ADR0005设想的终态相反(当时让 QA 的 contrib WebUI 吸收所有 lean agent,并把 qatlas-lean 拆成仅存放内容的QuantumAtlas-Theorems仓)。该设想已放弃;本 ADR 是新的边界终态。contrib 路径不使用 SDK。 ADR
0005在 QA client 中放了一个 Copilot/anthropic/openai-SDK 起草器。qatlas-lean 已经把每个 agent 都作为扁平的copilot -p --agent <name>CLI 进程运行;Claim 起草器只是其中一个(claim-drafter)。不引入第二套 LLM 调用机制,也不在 QA 侧保存 LLM 凭据。mock 仍是完整替身。 contrib 流程复用 qatlas-lean 自己的 Gitea client,因此
backend=mock会提交到 daemon 已经轮询的文件后端 mock,backend=gitea则在贡献者自己的 token 下提交真实 issue。 整条起草 → 求解 → 审计流水线可以在零账号条件下端到端测试(tests/integration/claim_contrib.py)。QA 边界更简单,而不是更丰富。 QA 通过 HTTP(以及后续 MCP —— ADR
0007)暴露只读 paper/corpus 数据;它从不起草、持久化或维护 Claims/Theorems。client claim 插件默认关闭(不出现在配置plugins列表中)意味着 QA client 代码默认不进入 lean 领域;文件仍保留,但直到用户通过配置选择启用前都处于休眠(未激活)状态。
插件平台如何保持通用(配置驱动启用)¶
QA client 插件系统有意保持通用且配置驱动,与 qatlasd 的 builtin 插件模型一致(ADR
0001/0003):哪些一方插件被启用由用户配置文件决定——即 config.yaml 的 plugins: 列表
——而不是硬编码在代码里。pip install quantum-atlas 后,用户通过编辑该列表打开/关闭某个
builtin;无需改代码。一方插件(lean、claim)随包分发,并作为 catalog(目录)登记在
qatlas/client/plugins/registry.py;只有当 builtin 的名字出现在已启用的 plugins 列表中(默认只有
lean)且其 available() 环境检查通过时,它才贡献 CLI 命令。第三方插件通过 qatlas.plugins
入口点注册。因此,"退役" claim 插件只是把它留在默认启用集合之外——文件仍作为随包分发、可选择启用的插件保留,
pyproject.toml 的 contrib extra(fastapi/uvicorn)也保留,使其在启用时仍可运行。(qatlasd
是 Go,配置路径不同,但遵循同样的配置驱动原则——见 lean 侧交接。)
变化内容¶
QA 中默认关闭(配置驱动,文件保留):client 插件名单现在由配置驱动——
qatlas/config.py增加plugins列表,qatlas/client/plugins/registry.py只启用其中点名的 builtin(默认lean)。claim不在默认集合中,因此qatlas contrib不再暴露它;用户可用plugins: [lean, claim]重新启用。插件文件(qatlas/client/claim/)及其测试(tests/client/claim/)保留为随包分发、可选择启用的插件;pyproject.toml的contribextra(fastapi/uvicorn)也保留,以便启用时运行。旧的专用claim_plugin_enabled标志被删除,改用通用plugins列表。只更新用于暴露入口的文档字符串 以及qatlas/client/contrib.py中对claim的引用,使其指向 qatlas-lean。QA 中保留:
lean透传插件(qatlas/client/leanplugin/——qatlas lean <subcommand>仍驱动配置好的 qatlas-lean checkout,因此qatlas lean contrib claim …会到达新流程);文献读取界面 (/api/papers/*,ADR0007);theorems 拉取插件(ADR0002)。qatlas-lean 中新增(它的仓库,不是本仓库):
src/qatlas-lean/contrib/claim/(移植后的流程、stdlibhttp.server、CLI-agent 起草器)+ 一个claim-drafterflat agent + 一个qa_base_url配置旋钮。
不变内容(重申决策,而非推翻)¶
ADR
0004—— QA 侧没有 Claim 集合 / 没有/claims页面。 仍然成立;事实上被进一步强化—— QA 不持久化任何 Claims 相关内容。只更新0004中指向起草机制的交叉引用(它现在位于 qatlas-lean, 而不是 QA 的 Copilot-SDK 插件)。ADR
0007—— references 是kind:id,由服务端通过/api/papers/lookup解析。 协议 完全相同;只有调用者变化(从 QA 的 contrib agent 改为 qatlas-lean 的 claim 流程)。0007已经记录了这个 prover-as-client 边界。ADR
0002—— theorems 插件从 git 拉取已证明 Theorems。 不变。
备选方案¶
保持 QA 侧 claim 插件启用(ADR
0005原样)。 否决:这会把维护中的 Lean 相关流程拆到两个仓库, 让 SDK 代码路径继续存活在 QA client 中,并与0007现在记录的"qatlas-lean 拥有 claim/proof/theorem 工作流"边界相矛盾。直接删除插件文件。 否决:启用由配置驱动(builtin 只有在配置
plugins列表中被点名时才生效), 因此一个只是不在默认集合中的插件已经是休眠的——删除相较于默认关闭没有额外收益。保留这些文件作为随包分发、可选择启用的插件, 可以在零活跃界面成本下保留一个可选本地兜底 + 参考实现。漂移风险有边界:插件默认关闭, 并且明确标记为非权威(qatlas-lean 拥有维护中的流程)。每个插件一个布尔标志(旧的
claim_plugin_enabled)。 否决,改用一个通用plugins列表: 每个插件一个专用开关字段无法泛化,而单一列表可扩展到任意 builtin,并在一个地方表达"已启用集合"。
影响¶
QA client 界面缩小:
qatlas contrib默认失去claim子命令(默认启用集合只有lean)。claim仍随包分发,只需一次配置编辑(plugins: [lean, claim])即可恢复。维护中的/权威 issue 正文形状(
## Claim/## Why it matters/## Paper reference/## References+ 末尾claim_id:标记)现在只存在一份,位于 qatlas-lean 的contrib/claim/issue.py。QA 只保留一份休眠、未注册的副本(自己的qatlas/client/claim/issue.py), 它是非权威且不对外暴露的。发布前不承诺兼容性;旧 QA 插件提交过的 issue 历史已经是权威形状,因此 qatlas-lean 的去重逻辑可原样识别。