Repository navigation
[BUG] Validate report citations and persist truthful dissent from authoritative inputs #13
Description
2026-10-14 · 合并后验收对账(部分完成,Issue 保持 Open)
- 已合并 PR #31,squash commit 07eacea。修复权威 Evidence/Claim 引用校验、Generation 边界、模型不能自填权威 FinalDecision、Dissent 持久化与 HTTP/A2A/导出的一致性。
- 证据:PR 记录了具名 RED→GREEN、MySQL 8.4 升级/新建校验、终态事务完整性、race/vet/frontend;最新 PR CI 6/6 passed(包括 MySQL migration compatibility 和 Decision writer cutover)。实时代码 Sandbox 的四项本地 SKIP 不算通过。
- 仍未完成:对模型自然语言中“已授权 / 已发送 / 已验证 / 已完成”等事实陈述进行结构化核验;Rev4 §11–12 的完整六维状态与 REPORT-01 总体验收仍属父 Epic #7,没有随 fix(report): validate authoritative citations and persist dissent #31 合并交付。
- 关闭条件:未完成的验收条目需有独立可追踪实施任务和 RED→GREEN 证据,且 [BUG] Validate report citations and persist truthful dissent from authoritative inputs #13 的验收范围经明确对账后,才能关闭。本次只记录局部交付,不改写历史发现时的代码基线。
- GitHub 曾在合并时把 [BUG] Validate report citations and persist truthful dissent from authoritative inputs #13 自动关闭,已经明确重新打开;此次补录不代表根因全部解决。
路线图:#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. 修复范围与不可更改的语义
- 输出报告的证据和 claim 引用必须属于当前有权、有效、版本固定的权威工件,不能仅要求非空;引用缺失、重复、未知/撤销来源必须明确拒绝或标记无法证明。
- 报告生成者只写自然语言解释,不自己决定权威 FinalDecision;对原始投票、dissent、条件和候选/选择/授权/执行状态进行结构化绑定,并在规范报告中持久化。
- 统一持久化报告、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 或关闭状态。
Activity