Skip to content

[BUG] Validate report citations and persist truthful dissent from authoritative inputs #13

Open

Description

@jamespud

2026-10-14 · 合并后验收对账(部分完成,Issue 保持 Open)


路线图:#2 · 父 Epic:#7 · 最终设计:https://github.com/jamespud/MAGI-system/blob/6fb34f052c33386bffd0e123ab5b36556a4c5415/docs/magi-final-personality-acceptance.md

0. 准入、等级与证据边界

  • 发现代码基线:98c69a14b274bc1d74561b01bd4de2f1e81f4c33(以本 Issue 开工时的最新 main 重核行号和未合并 PR)。
  • 规范条款:§2、§11–12、§19;主要不变量:REPORT-01、EVID-02。
  • 建议优先级:P1(可能输出不存在/未授权引用并遗漏落库异议;不代表当前已证实实际输出发生伪造)。
  • 当前证据级别:只读静态代码核对;尚未执行复现或测试,不能据此声称发生过生产事件。
  • 重复问题约束:本 Issue 聚焦一项共享错误前提;同根因的相邻调用路径以补充回归为主,不平行创建重复 Issue。

1. 预期行为与已核实实现差异

backend/domain/service/commander.go:95–106 仅将 PERSONA/QUESTION/CONSENSUS/票数/EVIDENCE_IDS/CLAIM_IDS 传给 LLM,不传完整票据、理由、少数意见或条件;reportCites:137–145 检查输出至少有引用,但不校验输出 ID 属于输入的权威集合;domain/entity/report.go 的 Decision 由 LLM 自填。handler/export RenderDissent 在返回时附加,但持久化 Resolution.FinalReport 不包含该内容。

最小待复现场景:报告模型编造一个形状合法但不在当前冻结 EVIDENCE_IDS/CLAIM_IDS 集合内的 ID,当前简单非空检查可能通过;持久化报告缺少真实少数意见,HTTP 响应与导出依赖额外拼接。

预期行为:满足 REPORT-01、EVID-02 及相关既有系统契约,禁止通过错误降级/错误重试/丢失权威材料掩盖真实状态。

2. 修复范围与不可更改的语义

  1. 输出报告的证据和 claim 引用必须属于当前有权、有效、版本固定的权威工件,不能仅要求非空;引用缺失、重复、未知/撤销来源必须明确拒绝或标记无法证明。
  2. 报告生成者只写自然语言解释,不自己决定权威 FinalDecision;对原始投票、dissent、条件和候选/选择/授权/执行状态进行结构化绑定,并在规范报告中持久化。
  3. 统一持久化报告、HTTP/A2A 与导出投影中的少数意见;兼容旧报告不能把不存在的历史投票伪造为完整新式报告。

非目标:本 Bug 先修复引用集合与持久化 dissent 等既有错误;完整六维状态/API 契约由父 Epic 建设。

3. RED→GREEN 和失败边界验收

  • RED:报告包含不在输入集合内的虚构 ID,但旧 reportCites 接受;GREEN:拒绝、修正或明确披露无法引用。
  • 真实投票中的少数意见和条件在权威持久化报告、HTTP 与导出三处一致;无异议场景不编造 dissent。
  • 模型文本中错误声称已授权/已发送/已验证或使用未冻结的证据时,结构化校验器阻断;旧 Resolution 的兼容策略具测试。
  • 具名测试、复现日志、真实运行命令和相关 CI 结果附在修复 PR;未运行不得标记通过。
  • 对相邻调用者、已有兼容路径、持久化/恢复及历史数据的影响进行审阅;必要时拆出独立阻塞 Issue。
  • 不降低规范与授权安全边界;更新相关文档及可观测性(如适用)。

4. 实施前核对、遏制与收尾

  • 在最新 main 上复核代码,核对是否已有并行修复;建立真正旧实现失败的用例,确认根因及反向证据。
  • 判断是否影响正在运行的受保护动作、既存审批/报告/票据或历史工件;若有实际越权/数据完整性暴露,先执行可验证的功能禁用、权限限制或重核措施并更新优先级。
  • 明确原子/线性化点与并发取消、撤销、重试的适用边界;把独立的大型架构变更留在所属 Epic。
  • 合并后回填 PR/commit、测试结果、遏制/迁移证据;不存在无法解释的遗留阻塞项。

阻塞:若本 Bug 的结果被新架构契约依赖,应在对应 Implementation 上建立 Blocked by;不要将本 Bug 扩张为完整 Epic。


2026-10-23 · Implementation progress reconciliation (main 37ec45997a62e4e2829f69e7384ed6f1a6c4447e)

PR #31(merge 07eacea83e1c1e94ca45e027e5405c9e094df7b8)已完成此 Bug 的结构化部分:权威 Evidence/Claim 引用、Generation 边界、模型不得自定 FinalDecision、Dissent 持久化与 HTTP/A2A/export 一致性。请使用本 Issue 开头的 2026-10-14 部分完成记录和 PR/CI 作为已有证据;勿把下面原始诊断误解为当前 main 的未修路径。
剩余范围: 模型自由文本“已授权/已发送/已验证/已完成”等陈述仍缺少独立权威核验;完整六维状态和 REPORT-01 由 Epic #7 集成。应先明确自由文本声明阻断/降级的独立可测试子任务和旧记录兼容,再讨论是否关闭此 Bug。当前 Open;本同步不改它的验收 checkbox 或关闭状态。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions