Repository navigation
fix(reports): retain recorded Task citations in managed reports - #7570
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · GPT-6 · OpenAI · self_reported
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
未发现阻断性问题。已为普通 managed Session 配置周期报告的用户。任务的 evidence 字段已记录一个有效网页地址,旧报告输入仍只提供 Todo 标识,编辑器无法使用该出处;新报告沿原任务保留该地址,并把它作为未读取、未核验的引用交给原报告链。File/SQLite 的真实原生任务、两个报告格式和原会话完整答复现在都能保留同一出处。不抓取网页、不证明公开许可、不扩大受众,不新增自然语言配置、调度器或布局。模型内容质量、真实地址可达性和后续自然到期生产报告仍需各自验收。
改动思路 / Approach
不交付的最强理由是:原任务标识已经可追溯,另加引用也不能保证报告质量。但现在的失败不是链接样式:本地编辑事实里根本没有原地址,合法编辑响应选择该出处时也会被拒绝。只修改 renderer 无法修复。这里把原 portfolio 已有的资格判断抽成共享 helper,再在现有冻结来源投影里派生本地引用,避免复制过滤规则或增加外部读取。
引用资格只保留一个共享 owner;本地与 portfolio 使用同一冻结事实投影及原有 v2 格式,渲染和投递继续由既有 owner 负责。本 PR 只补 native Task 的单个完整 evidence 地址到冻结事实,不从笔记或复合字符串猜链接,也不改原任务权威、调度、模型执行和受众。canonical Task 及其完整冻结行仍是来源;新增 fact 是派生投影。无效候选只是不成为网页引用,原任务记录仍存在。真正的冻结不一致继续失败,投递与重试仍走原 owner。
具体改动 / Changes
独立依据是改动前的 docs/product/periodic-reports.md,spec_revision f5e9be3671c1b5c80eba5c62fe4d617bfefd66d6,以及同提交 docs/reference/protocols/periodic-report-v0.md 的 Ownership boundary。recorded-provenance 对应未读未核验、不抓取网页;original-scope 对应原受众及来源缺口;frozen-bytes 对应历史冻结字节不改;source-owner 对应来源、渲染与投递各守原责任。这四项在本范围均 implemented;文档新增段只是披露行为,未用新文档反向定义验收。
关键代码讲解
_recorded_web_references(chat_manager_history.py:36)逐字复用旧完整读取路径的语法、隐私、HTTP(S)/host/port 校验,返回原地址及其摘要身份,不解析正文、不访问网络。原_recorded_details调回同一 helper,下一次改规则只需改一个位置。_source_facts(private_generation.py:34)只对 v2 local 的单个 Task evidence 字符串增加引用事实。原 Todo、完整行与来源摘要保留,附加事实明确 unverified、未读取、原受众;portfolio 字段和文本保持原样。prepare_session_report(同文件174)仅新窗口使用已有 v2;遇到旧 request 先校验再返回,_verify_source_facts仍重建同一格式的完整事实。测试覆盖 v1 已含地址但不得补写、重复准备所有 JSON/Markdown 字节保持,以及改写 source/facts 的拒绝。
7文件 +127/-29;其中生产41/-26、测试69/-2、文档17/-1和两张合成截图,没有新模块或第二引用策略。真实 native 测试通过原 Task update 写入 evidence,File/SQLite 各跑原 worker/Turn,断开私有 provider 后仍能完整返回;模型替身只负责选择这个地址,未替代被检验的 Task、冻结、渲染、结算或消息读回。
对主干的风险 / Risks
主要风险是误把私有或复合字符串当可公开出处,或升级格式后改坏历史窗口。PASS:12个私有路径、凭据、畸形地址、非网页协议、换行、正文及复合引用负例;缺失 evidence 和旧 v1 控制不变。相同最终18例在不可变 base 为3个预期正例 FAIL、15控制 PASS,精确 head 的153项来源/冻结/原生回归 PASS,49项无关启动/额度用例未运行。合法 URL 的新增只改变编辑输入,不更改模型额度、原受众、业务 Task 状态或后续周期决策。
标准 premerge 的6 direct、14 selected及Ruff通过。预检原始 exit1/manual_review_required 保留:两PNG不能由文本扫描证明安全,已单独检查像素、元数据与合成数据来源,无私人内容;没有把 hold 改名成自动通过。打包 SQLite/HTTP journey 的配置201/200、同一native committed结果、完整原消息正文和六个DOM引用均核同;测试一次合成模型调用,报告没有新增Lark写入。引用地址没有被抓取,因此可达性、许可与语义质量仍未知。按当前 Goal 政策未查询 CI,CQR 未启用。
语义与 CI 对齐
复用既有 frozen_source_v2、unverified 来源事实及原 renderer 规则,未新增通用状态词表、激活开关或把观察升级为授权。无新订阅时不凭安装或记录了 URL 开始任务。旧 v1 作为真实持久数据继续保留;共同部署不构成重写历史的理由,新增文本不要求模型外读或跨受众发布。
我的整体评价 / Verdict
APPROVE,属于 justified_increment。long_horizon preserved:原日历、冻结窗口恢复、结算与后续执行不变,旧窗口可重复读回;user_experience improved:已有授权与原配置下零新增陈述、确认或复制步骤,出处可从原完整答复到达。已检查同一真实打包答复阅读页的桌面和390像素画面:完整标题、时间、概览及出处入口可见,窄屏正常换行;合成长文用于验证引用传递,重复正文不作为内容质量改进。未验证真实模型的信息密度、地址内容与可达性、自然到期原 Bot 新报告或全部页面。
引用资格只保留一个共享 owner;本地与 portfolio 使用同一冻结事实投影及原有 v2 格式,渲染和投递继续由既有 owner 负责。本 PR 只补 native Task 的单个完整 evidence 地址到冻结事实,不从笔记或复合字符串猜链接,也不改原任务权威、调度、模型执行和受众。这个有用边界已有真实原生路径证据,继续抽象独立引用服务会增加权威和维护成本。完整 NL、Agent 层级、实际内容密度与自然生产送达仍归既有任务,本次没有借局部通过关闭父目标。当前 runtime observation 为 session_not_found,故 Reviewer 如实采用 self_reported 家族声明,不猜测精确运行构建或冒称独立模型评审。
English verdict: APPROVE — head 5c8363a. Recorded Task evidence now reaches frozen reports and the original response through existing citation rules. File/SQLite, legacy and unsafe-input controls and required local checks passed; model quality and public access remain unverified.
普通 managed Session 报告中,即使 native Task 的 evidence 字段记录了有效出处,冻结编辑事实也只保留 Todo 标识,报告无法引用该地址。此改动复用已有引用资格过滤,将单个合格 HTTP(S) 地址保留到新建的 v2 冻结来源、Markdown、HTML 与原会话完整答复;明确标注未读取、未核验,继续保留完整 Task、原受众和旧 v1 内容。
验证:153 项来源、冻结及 File/SQLite 原生报告回归通过(49 项无关用例未运行);同一最终测试在不可变主干上出现 3 个预期正例失败、15 个控制通过。Ruff、6 项直接检查及 14 项标准预检通过;两张截图的像素、元数据和合成来源已人工核验。真实打包前端使用临时 SQLite、一次合成模型答复,验证配置→原生报告→完整原会话返回→桌面/390px 阅读。它证明引用传递和阅读机制,不证明地址可达、公开许可、模型内容质量或自然到期生产送达。
桌面与窄屏实测图: