任务:回注通道——Circle 回注的知识经 Hub 确定性核验后入库(K2,范围已改)

范围改了(所有者 2026-10-23 傍晚):

  • 候选留在 Circle 本地,不进 Hub。
  • Circle 的整合技能(autodream,对应模型里的 P10)判定某条已经成为事实时,把它提交给 Hub。
  • Hub 只做确定性核验,通过了才入库,成为产品的读者都能读的知识。
  • Hub 里不再有按人私有的候选层。

原任务页里的核验规则不变:引文逐字、路径可解析、不越过声明、关系只记关系。依据:

  • docs/hub-r4-kb-direction.md 第二、四、五节;
  • 本页下面的模型改写;
  • K02、K04、B01、B03、T04、P10,用 node tools/show-element.ts 读。

  • 分支和工作树:kb-candidates,目录 circle-hub-kb-candidates,在 WIP 2e7d567 上接着改。
  • 可以改的路径:
    • contracts/**:只按下面的模型改写,加上已经加的三个轴;
    • hub/knowledge/**:层的那一带;
    • hub/runs/engine/**:回注运行写入那一段;
    • hub/server/tools.ts 和 text.ts:只为把回注结果写进模型看得到的文本;
    • 新的工作流包 packs/workflow/knowledge-contribution/**,名字可以回报后再定;
    • 对应的测试和 README。
  • 不再做,WIP 里已有的拿掉:
    • 只本人可见的候选存储;
    • 管理员看不到的会话摘录上传(upload_file 的 knowledge_layer 字段);
    • 提交摘要排除候选部分;
    • 普通运行的提交里夹带候选。

    已答复过的第 1、3 问因此作废(upload_file 的私有上传、提交摘要不含候选)。仍然有效的是:

    • 第 2 问:被引文档要过边界的范围核对;
    • 第 4 问:模型只看文本,回执要写进文本;
    • 第 5 问:三个轴。
  • 规则:同前(不推送、不建 PR、不发布、不部署;不碰 7420、钥匙串、环境配置文件和任何真实系统;测试只用合成数据;git commit -s)。
  • 验证:npx tsc --noEmit;node tools/gen-contracts.ts --check;node --test --test-concurrency=1 对 contracts/**、hub/knowledge/**、hub/runs/**、hub/server/**、packs/**。

模型改写

集成者是模型负责人,授权你在本分支照下面写进 contracts/model.json,再重新生成。加一条变更记录,来源写“所有者 2026-10-23 傍晚:候选留在 Circle 本地,成为事实后经整合技能回注,Hub 只核验”。

  • K03 DEF 改为三个写入方:
    • 树本身:生产器写;经核验的归位提议以后计入。
    • 观察层:不变。
    • 回注层:Circle 本地沉淀、判定成为事实后回注;Hub 按确定性规则核验后写入,产品的读者可读,带来源、提交人、会话和依据等级。

    候选在 Circle 本地,不进 Hub。

  • K03 R[4] 改为:回注的根据必须是 Hub 已存的源文件片段或设备回显。只有会话里人的说法作根据的,要负责人署名才写入;这一版先不入层,署名流程以后做。
  • K03 R[5]:主语从“候选”改成“回注条目”,其余照旧。删掉“候选也没有已核验状态”这一句,因为回注条目是核验过的。
  • K03 R[6] 改为:写回注层同样经过边界校验(引文逐字、适用条件、冲突)。回注本身是一次运行,提交按普通提交原样保存。
  • W07 R[4] 改为:按文档的产出不随普通运行的提交,回注走单独的回注运行;按任务的产出仍只进运行记录。
  • P10 DEF 改为:
    • 包里声明的产品观察进观察层;
    • 裁定进台账;
    • 模型解读留在 Circle 本地,由 Circle 的整合技能判定成为事实后回注,Hub 核验后进回注层。
  • K02 F[6] 里“候选的适用条件按判断记录”改成“回注条目的适用条件按判断记录”。
  • knowledge_layer 轴的 candidate 改为 contribution,标签“回注层”。改动面太大就先回报。provenance_type 的 candidate 不动。

要做的

  1. 回注运行。 一个通用工作流包,条目是四种按文档的产出(document_output_kind:分类、归位提议、声明、关系)。
    • 每条带引文(引用加原文)和要挂的节点路径;
    • 输入是它引用的源文件(运行绑定)和锁定的根;
    • 核心里不写任何产品名。
  2. 确定性核验,不调用任何模型,WIP 里已有的照用:
    • 引文逐字出自所引源文件,和边界用同一比对规则;
    • 路径在锁定的根里能解析;
    • 不越过声明:不改片段的来源类型,不添原文没有的适用条件;
    • 关系只记关系和双方引用,不改任何一方;
    • 根据只有会话说法的,不入层,回执写明“需要负责人署名,署名流程以后做”。
  3. 入层。 要求项全部满足的条目写进回注层:
    • 绑定节点路径、被引片段摘要和根;
    • 产品的读者可读,可见性在查询里过滤(K05 R[4]);
    • 不计入根摘要。

    没满足的不入层,回执给修正说明。

  4. 读。 get_nodes 读节点时,把回注层的条目一并返回:
    • 各带来源、提交人、时间和依据等级,标明“回注”;
    • 矛盾关系照 K3 打标。K3 的读侧在另一个分支,关系记录的形状合并时由集成者对齐,你把形状集中在一处。
  5. 按任务的产出(排序、取舍、分数)只进运行记录,测试钉住它们不进回注层。
  6. 测试全部用合成包和合成源文件,四种产出各有正例和反例。要覆盖:
    • 引文不逐字;
    • 路径解析不出;
    • 越过声明;
    • 只有会话根据;
    • 产品的读者读得到、无权的人读不到;
    • 根变了显示“被引片段已变”。

完成后在终端里回报:提交号(WIP 之后的提交,要不要压缩由集成者合并时定)、测试数量、没做完或拿不准的地方。合并前会请另一家族复核。