Skip to content

Product Integration Notes 2026 10

jiale li edited this page Oct 16, 2026 · 1 revision

Product 联调历史记录:2026-10-08 至 10-11

本页从 TD2A 拆出当时的联调与问题定位记录,保留原来观察到的行为和修复背景。 其中 Hot 窗口、失败反馈和报告策略等后来发生过变化,不得作为当前实现指令或待办。 当前合同见 TD2A、产品体验和验收台账。

34. WORLD heterogeneous read projection — 2026-10-08

WORLD 的首轮重构采用以下读取边界。GET /api/v1/world/stories?limit=4..18 由 Application Query 组合既有 Document/Revision/Chunk、带 Observation 的开发对象/InternetAsset 和 durable Incident;不写 Knowledge、不启动 M4–M6、不产生新的研判。

DTO 返回原始 headline/excerpt、excerpt_origin、结构化 facts、source、对象/事件引用、published_at / happened_at / observed_at,以及 Observation / DocumentRevision / Chunk / locator。generated_at 是读取快照的测量时间。删除 prototype 的 narrative/why_it_matters、标题特判、AI 关键词评分、类别加权与 regex 摘要。类别来自 source inventory;宽泛 independent/incidents 源需要 accepted、未 supersede 的 Repo/ResearchWork 关系,或 registry 中已有 AI/model/Agent authority scope。source abstract 优先于普通 body,来源与类别交错是覆盖规则,不代表安全重要性评分。

每个文档只读最新 Revision;SQL 按来源限量,正文只读最终选中的文档。opaque SHA 和单纯身份不会伪装成有内容的变化。来源文字保持原语言,界面与类型表达由 Web 的中文/英文 presentation 持有;不把固定英文判断模板写进 Query。

WorldStoryReader 是进程内、可替换的 15 秒 read cache。冷读取由锁合并,响应深复制,测量时间保持不变。已有快照过期后立即返回原测量并用独立 session 后台更新;刷新失败保留原测量,shutdown 取消后台读取。API bootstrap 最多预热 5 秒;读取失败/超时会记录日志,其他 Product 路由继续可用。它不替代 durable Evidence authority,也不承担历史 WorldSnapshot/replay。

首屏只依赖 stories。Hot working set 后续独立读取,不能被当作已经晋升的 Knowledge;overview 与 formation 在故事首次读取后独立读取,overview 提供近 24h 的真实采集/变化/写入摘要;完整来源 health 仍在方向 inspect 中展开。DOM 叙事 + SVG 空间对象支持 reduced motion,不依赖 WebGL;邻近位置只表示共同处于观察世界,不虚构对象间关系。对象操作带既有 object/incident/CVE/question 坐标进入 dossier 或 START。技术坐标下沉至 inspect。

35. Product WORLD / START / dossier 联调收口 — 2026-10-08

WORLD 的 Hot read 保留排名窗口(64 条)并单独返回 resident_total,计数仅包含尚有 Redis payload 的驻留对象,排除排序/固定/访问等索引与过期成员。Web 每组展示八个真实对象,搜索明确限于已载入窗口;数量不是 Knowledge 留存数。来源方向、Hot 和阅读模式支持 URL 进入。

GET /api/v1/world/formation 从已有 ProcessingRun、cause Observation 与 KnowledgeRevision 读取最近富化处理;活动处理另行保留。只有存在 cause_processing_run_id 对应的 Knowledge 提交才显示“已写入知识”,success 本身不等于 canonical commit。字段属于 Application View,不新增业务 authority,不调用调查链。

Product Document read 新增最新修订第一个原始 Chunk 的 source_excerpt / excerpt_chunk_id / excerpt_locator。前端直接阅读节选,并保留原文入口;修订/索引/Observation 坐标折叠。世界来源材料可进入对象档案,再携带真实对象与可读标题进入 START。裸情报入口不再默认选择一个 CVE。

同步 QA 的逻辑模型超时在既有 Task/Execution 失败记录之后转为可重试 deadline_exceeded ProblemDetail,携带实际 run_id / timeout_seconds。不生成回答或异步成功状态。无目标检索若模型要求继续调查,则呈现选择目标的明确提示。

M5 对非 Vulnerability 对象采用 SourceInvestigationPlannerDecision(perceive / patch / wait / stop),不向模型开放只支持 CVE 的 EnrichmentRole v1 委派。实际能力限制同时进入受信 runtime invariant;Vulnerability 仍沿原委派协议运行。模型自行选择读取与 StatePatch,既有 M4 证据 gate 保持不变。此修复来自真实 ResearchWork 调查被误委派、因空 CVE 失败的联调记录。

Investigation Product View 另行返回 case_lifecycle(既有 durable Case owner 的状态),status 继续表示当前运行投影。回合 blocked/failed 不等于 Case 已关闭;开放 Case 的追问沿同一 Case 继续,取消权限使用真实 Case lifecycle + owner principal。真正 resolved/cancelled/closed 后的后续问题仍按原 session continuation 协议处理。这一差异来自真实 follow-up 联调,前端不再依据上一回合 failed 推断“创建新 Case”。

真实 VERIFY 联调还发现重复委派同一 EnrichmentRole 子任务时,子任务可能已经 completed,而父 InvestigationRole 再次进入 waiting_dependency,因此不会再收到可唤醒的终态事件。运行时现在读取委派结果中的子任务状态:已完成则立即读取当前 canonical Evidence 并继续本回合;失败、阻塞或取消则给出明确阻塞原因;只有仍在运行的子任务才进入事件驱动等待。子任务输出本身不被提升为事实。

2026-10-12 逻辑修正:上述失败、阻塞、取消或超时此前会直接阻塞父 TaskRun,使“工具失败改变后续动作”无法执行。现在子任务状态与停止原因作为无证据的 Percept 反馈给父规划器;可改查既有证据或其他已授权来源,重复无进展仍按上限停止。子任务失败不等于原问题已被否定,也不自动满足 EvidenceNeed。 执行环境缺少富化委派端口时也返回能力不可用的 Percept,允许同样的有界替代决策;目标越界仍是执行契约错误,不降级为可忽略的材料缺口。

同日收紧委派选择:规划器仅用调查绑定的目标对象类型决定是否开放 CVE 专用委派,关联上下文的漏洞对象不改变论文或仓库任务的 schema;混合目标任务使用不含 CVE 委派的安全路由。委派适配器再次核对目标是绑定的 Vulnerability 且 CVE 标识一致,拒绝伪造或错绑目标。

后续追查确认,旧委派 ID 包含 planner iteration 和 assembly hash,同一父任务在富化后刷新 Context 时会创建另一个语义相同的子任务。现将委派身份固定为父 TaskRun、目标对象/CVE 与标准维度集合,重放时复用已完成子任务;子任务保留创建时的 Knowledge 快照,父子 Context 修订变化不构成身份冲突。新的追问 TaskRun 仍可独立发起新一轮富化。

另一次真实 VERIFY 中,模型将 inferred reasoning_relation 的命题直接写入 confirmed,M4 State Gate 按既有规则拒绝。InvestigationRole 现在把拒绝原因作为下一轮规划反馈,受 no-progress 上限约束;模型可改写为有直接证据支撑的确认或保留为 tentative/hypothesis。拒绝本身不产生 Case 事实,也不再直接让整次 TaskRun 发生意外失败。

本轮真实论文联调进一步定位到 INSPECT 仅返回结构化投影、不返回已收录正文。已补充 document 物理读取算子:按精确 object_id 读取各文档最新 revision 的有序片段,最多 100 条,并携带该版本 Observation 对应的对象 EvidenceLink。缺失新版本片段时返回空结果,不混入旧正文;不创建新事实,也不绕过 StatePatch。真实 ResearchWork 感知已读到 20 个正文片段及 1 个持久证据引用。

2026-10-09 多轮 Bitget 调查暴露另一边界:模型把解释性长句放进 WAIT/STOP reason,超过 TaskRun stop_reason 的 128 字符存储契约,使已经确认事实的 Case 意外失败。Planner 在模型输出边界保留短机器码,对自由文本或过长原因使用有界停止/等待码;原有 Case 事实、未知项与模型调用记录仍按各自 owner 保留,终结与 M6 研判不再被存储长度错误截断。

同一会话在外部 Knowledge 已前进后继续 RETRIEVE,原路径将新检索结果与旧 M4 世界版本比较并报冲突,用户无法继续。现在 Product 在 Case-read 前检查 revision;若已过期,直接在同一 active Case 接受新的 InvestigationRole 回合,让 Perception 刷新 M4 后再做研判。查询意图规划期间发生版本变化时也落到同一续接路径。无显式目标的会话继续保留原 Case 和会话顺序;显式重绑仍走独立轻量读取。前端提交失败会清掉未保存的流式草稿,保留输入文字供重试。

该续接路径的真实运行又暴露 M6 交付缺口:M4 已确认 Chainalysis 的行动并记录 Bitget 自身措施未知,但 DecisionRole 仍返回 EvidenceNeed,用户没有报告。现在调查回合结束时,只要 M4 仍有未知项或开放 EvidenceNeed,就要求 M6 交付“已知事实 + 未知边界”的阶段性自然语言报告,并让 Case 保持 waiting 供后续追问;如果模型仍返回继续调查请求,使用仅含已确认事实和对应引用的有界报告兜底。QA 评测和权威结论仍以结构化 Decision 字段为准。

真实多轮会话还暴露历史渲染串位:所有共享同一 Case 的旧回合都从 Case 的 mutable latest_decision 读取最新报告。现在 M6 收口时通过父 InvestigationRole 的 request_id 将 Decision ID 回填至该会话回合的 decision_ref;问答记录只按此稳定引用展示对应报告和引用,Case 页面仍展示当前最新研判。旧回合无稳定引用时明确显示未单独归档,不把新报告冒充旧回答。

问答右侧审计轨迹同样按请求坐标收窄:TaskRun 摘要公开本次 Product request_id,前端将相同 request_id 的运行及其父子/前驱 DecisionRole 归入选中回合,事件随 TaskRun 过滤。Case 完整页仍保留所有回合的整体时间线。本地既有数据中可精确匹配的 9 个历史 Decision 已按父运行 trace_context 回填至所属会话回合。

36. 调查意图、关联取证与回合报告 — 2026-10-11

真实产品反馈暴露:从 Repo 档案进入问答并明确要求“调查关联证据、冲突、未知与外部上下文”,原自动路由因存在 object_id 而直接 LOOKUP;M6 将仓库语言、许可证和热度计数包装成“调查完成”。现由 Application 在已有稳定 object/CVE 或会话目标时识别明确的调查请求,携完整原问题进入 InvestigationRole。普通属性问题和“调查报告是什么”仍是读取;无稳定目标的自然语言问题仍先 RETRIEVE。正文重复当前 Case 的 CVE 可以继续同一 Case,真实换目标以及显式 API 重绑仍受既有生命周期约束。

M5 非漏洞规划指导升级为 investigation-model-v4-source:按问题需要追查双向关系、读取相关对象、检索简短项目名,批量写入相关事实,未覆盖维度写入 unknown,不能用元数据完成关系或安全调查。perception-planner-v2 在 TRACE/EXPAND 的 graph 步骤后追加依赖式证据读取;只沿此次返回的至多 20 条关系读取真实 EvidenceLink。读取额度按关系分配,在 SQL 限制候选行数并报告截断及实际读取次数;Percept 保留关联端点供后续导航。该动作不创建事实、不晋升候选、不绕开 M4 StatePatch gate。SEARCH 仍是本地索引搜索,不能被描述为实时外网检索。

M6 使用 decision-model-v6(不要求报告的调用使用 decision-model-v6-core),按完整问题判断证据充分性;报告首段说明重大覆盖缺口,空 conflicts/unknowns 列表不是不存在风险的证明,公开/未归档/stars 不能推导安全或维护质量。段落仍只能引用经过结构化结论验证的证据,旧 DecisionResult 保持不可变。

所有正常完成或受控 BLOCKED 的调查回合都可进入既有独立 DecisionRole 收口;FAILED/CANCELLED 不被改成成功。即使 M5 曾认为 EvidenceNeed 已解决,M6 新发现缺口时也先通过 M4 ContinuationGate 保留 Need,再以新 revision 提交可读阶段报告,两个操作在同一事务内完成。本轮问答绑定该不可变 Decision,Case 保持 waiting。非法 continuation target 仍被拒绝,并进入安全边界报告回退;任务重投不重复创建 Need/Decision。新报告包含 unknowns 时也保持 waiting,不因模型给出 final 就误报调查完成。

同一调查继续暴露 SEARCH 回传正文却遗漏已有 EvidenceLink 的问题。现在由 M3 公开读取接口按 chunk、DocumentRevision、object 和该 revision 的 Observation 精确绑定已存在引用,M5 的 lexical/dense Percept 同时携带段落与证据;不存在匹配 link 时仍留空,不借用新版本。文献支撑的发现必须归因原文,并以文档对象为 StatePatch target,不把论文提到仓库视为已经独立验证仓库安全状态。该链路经过原有 M4 支撑对象校验;不修改来源或自动晋升 canonical Knowledge。

真实运行进一步发现 StatePatch 拒绝反馈被 recent_percepts 遮蔽,模型看不到 target_ref 校验失败并重复同一写入直至 no_progress。Planner 现在合并最近来源 Percepts 和未重复的 last_percept;拒绝原因与可引用材料共同进入下一次 PromptAssembly。仅从已展示对象补全稳定 object 引用,relation ID 不会被自动改绑;结构化 schema 明示 target_ref 的对象/事件命名空间。完整 Role-loop 回归覆盖先拒绝、再纠正、最终只接受一个事实,M4 gate 保持原有严格性。

报告质量复查又发现模型选择 continuation 后,旧回退仅取最近三条事实,丢失更早且更相关的安全发现。Product 的已结束调查回合现使用 final-only InvestigationReportResponse,由同一次 M6 调用从全量 confirmed state 选择相关结论并组织段落;未检查维度写入 Decision unknowns,Case 保持 waiting。“交付报告”不等于“证据充分”。普通 QA/M6 调用保留 continuation,旧 continuation → Need → report 分支保留为非标准 provider 的防御兼容。新增 schema 与生命周期回归覆盖 M5 已解决原 Need、M6 仍发现覆盖缺口的情形。

本地真实问题复核已输出关联 PR、研究论文中的安全线索和清晰的待核实边界,报告自然段、固定来源版本、原文入口与会话回填均已走通;Case 保持 waiting。该检查是产品功能联调,不作为正式 QA 准确率或安全覆盖率结论;CVE/NVD、官方通告和版本修复状态仍需进一步取证。实现分批推送于 8c45072、60354f5、9396e24;详情阅读组件迭代为 831b8cb。

Clone this wiki locally