Repository navigation
feat(steward): deliver native scheduled reports to the original private chat - #7179
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
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.1-sol | OpenAI | runtime_reported | reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
REQUEST_CHANGES — P2:一次已知无效的报告回复会永久卡住原窗口。 评审对象 d2c1dfcc67da425515f5d3384c24fb8201451be5,比较基线 385771e56371315976ebe1166a3c07fea8b539df。File、SQLite 两条原生路径均在新 head 独立复现;另有本次引入的可维护性门槛失败。e354→d2c 的八文件增量与当前完整 PR 已一并审查。
动机
希望在原本人私聊定期收到完整项目汇报的管家用户。过去日历、原会话和报告组件各自存在,设置时间并不能自动得到报告;本次把到期窗口接入同一管家的原生执行,再把完整中文正文送回原私聊。
合成真实后端路径能够启用计划、生成固定窗口报告并核验完整送达;但一次已知无效的模型回复会留下无法恢复的窗口,取消后换计划被拒绝,恢复原计划也不再执行。本评审不宣称真实模型质量、真实账号送达、安装后采用或首次自然到期报告已验收,也不授予合并权限。
改动思路
入口沿用 Lark 设置里的原管家连接;明确启用后,现有日历窗口产生有限的报告 Todo,由同一个管家、原 Session 和原生 Turn 执行。报告生成通过校验后,原私聊的投递 journal 才负责分段发送与读回,全部正文核验完成后才推进发布游标。生成成功、入队和实际送达没有合并成同一个“成功”。
现有日历、原生执行与原会话投递各有明确所有者,组合边界合理;本次必须修复已知无效输出的恢复出口。当前边界是原会话内可配置、可恢复的定时报告生成与完整投递;真实安装和首次自然到期验收另行保留,不能用来掩盖已复现的恢复缺陷。 新增 context rebind 必须通过现有模块预算门槛或给出经过证据判断的预算修订;不能把新失败称为基线债务。 日历是可选策略,来源与受众是必须成立的不变量;模型和 Lark 是效果 provider,设置里的元数据仅是投影。已有日历、队列、读证据工具、渲染器、发布游标及最多四个并行投递的池均得到复用,无需另建隐藏 Agent 或后台调度器。
下面是本版本路径的文字对照,来自源码和独立执行,不是对未测分支的保证:
| 触发 | 原生结果 | 后续 |
|---|---|---|
| 未启用或首个未来窗口未到 | 不启动报告模型 | 保留原会话和监控 |
| 有效的到期报告 | 有限生成任务校验、记账 | 完整正文核验后确认送达 |
| 已知无效的 editorial 回复 | native failed,无可发布生成 | 取消后换计划被拦,恢复原计划也没有新 Turn |
具体改动
关键代码讲解
planStewardReport校验原 actor、source、provider、operator 和原私聊目标。第 33–34 行把“存在已准备请求且尚未核验发布”作为换订阅版本的禁入条件;它没有区分有效待投递与已知无效、根本不存在生成物的窗口。StewardReports.configure在原绑定 fence 下预览、应用并读回日历配置。prepared来自请求文件是否存在,取消只停原报告,不删除失败证据。这个保留原则正确,但目前没有终止或重试失败窗口的显式出口。freeze_private_report先持久化响应再验证;错request_digest会保留反证并抛错,不产生 generation receipt。同一窗口的不同响应禁止覆盖。原生 host 再使用现有独立 validator 和一次结算;普通 host 仍不默认接受报告专用 completion。LarkStewardReports复用原回复 journal 和 correlation,逐段核对正文;未知发送结果先读回,不能盲发。暂停、撤销来源和 late callback 在效果前重新检查。公开截图中的“全文核验送达”不能替代真实 provider 证明。StewardReport复用现有日历表单,提供启用、暂停、取消、下次和最近窗口;同一次手势完成 preview/apply。相关 schema、HTTP 路由、现有 wake/outbound 入口、产品说明、合成夹具以及 Python/TS 测试共同构成这次 38 文件的完整边界。
新增的 ChatRuntimeController 允许 all_registered 报告在授权库存变化时进入既有 context owner,丢弃旧上游模型历史后重新严格准入,保留可见原会话。selected 范围、撤权和模型执行中变化仍拒绝;普通非报告分支不启用。StewardReports.prepare 也修正为通过实际工具名调用 scoped reader,当前测试检查真实 inventory 不再为空。这些新增修复解决了不同问题,没有修复无效输出后的恢复。
独立规范为 docs/product/periodic-reports.md,规范版本 385771e56371315976ebe1166a3c07fea8b539df,按修改前文本判断:
- Daily portfolio report:固定窗口、原私聊完整中文正文、生成与送达分离,合成原生路径已实现;真实内容质量仍未资格化。
- Implementation order and acceptance / 3:已有设置可启停并读回,但已知失败无法恢复,not_met,需要本评审 P2 的最小修复。
- Implementation order and acceptance / 4:File/SQLite、busy、恢复、撤权、重复/未知/部分投递等已有针对性覆盖;新增反例证明覆盖仍漏掉无效回复后的恢复。
- Implementation order and acceptance / 5:安装采用、真实端到端及首次自然到期属于后续明确保留的验收,deferred,本评审没有冒充已经完成。
对主干的风险
P2 的完整触发链:在隔离的真实 File 和 SQLite 原生环境中,让模型返回 JSON 格式正确但 request_digest 错误的 editorial 响应。外层 Chat Turn 结束,内部原生结果为 failed/host_failure,只发生一次模型尝试;保留请求、无效响应和 open Todo,没有 generation,也没有投递。随后恢复正常模型,显式取消成功。改成另一个未来计划被 the original frozen report still requires verified private delivery 拒绝;恢复同一计划则 pump 返回空,没有新模型 Turn,health 仍显示 enabled / not_generated。等待或重启同一失败请求不能把不可发布内容变成已核验发布。
最小修复是沿现有窗口/原生 Turn 所有者增加本人明确操作的重试或终止/替代,保留旧失败、成本和证据,并把已知失败与尚未生成区别展示。不能自动重放未知模型调用或未知发送,也不能要求用户手改私有状态。增加 File/SQLite 回归:无效回复 → 本人恢复操作 → 后续有效生成与完整投递,并断言旧失败保留且没有重复效果。随后重跑 tests/test_native_steward_reports.py、tests/test_lark_steward_reports.py 及标准 diff premerge。
独立验证:当前十个 steward 与 manager context/inspection/report Python 模块 241 passed,两个 TS 模块 11 passed,均无失败或跳过;当前 typecheck 通过。e354 的 Chat 打包、CSS、界面及共享 host prompt/result 证据仅在相关十五个源码/图片逐字节相同且基线未变的范围内复用,不冒称重新渲染 d2c。
第二个 P2:新引入的标准 premerge 失败。 当前 6 个直接检查中 5 个通过,19 个选择检查中 18 个通过;同一 module_metric_budget:loopx/chat_runtime.py 分别被直接检查与 catalog 报出,另有六个 PNG 人工 hold。使用同一完整 ratchet、精确不可变基线源码和该 commit 的私有 Git index,基线检查通过而当前失败:chat_runtime.py 从 2306 行到 2317 行,超过未变的已评审 ceiling 2312。这不是已有 compatibility exception,也不是未知基础设施错误。最小修复可以把上下文准备局部收回已有 context owner,或按现有预算决策文档给出同工作负载、消费者价值及维护成本支持的已评审预算修订;不能悄悄加上限或删有用语义。重跑 uv run --extra test python examples/control_plane/control-plane-maintainability-ratchet-smoke.py --format json 和标准 premerge。首次无 Git 元数据的归档调用在检查前报错,不被当作基线结果。
六张图的像素及 PNG metadata 已检查,未看到私有内容或文本/EXIF metadata,但人工观察没有改写 native gate 的六个 hold。合成浏览器夹具退出时模拟 setup manager 缺 close,退出非零;该限制与已持久化的交互结果分别保留。
关闭报告时,共享 host 的 3 个完整 prompt 与 9 个完整结果在不可变基线/当前版本逐值一致,没有文本归一化;未启用和未来日期测试均不启动报告模型。新增报告可用性元数据和设置控件是已披露的加法,不能被当作执行授权。公共协议仍是原管家、有限任务和原回复,没有扩大 peer 或业务执行权。
语义与 CI 对齐
新报告路径复用既有 actor、calendar、Turn 和 delivery 词汇,并局部扩展 report plan/work kind。阻断来自 prepared 把已知无效尝试也归入“必须先核验发布”的状态:当前编辑、取消与恢复任务无法完成。上述实际反例支持 semantic_alignment=violated;修复应在现有 typed owner 内给出明确状态转移及对应负例,不需要增加通用框架或减弱未知结果保护。
我的整体评价
long_horizon:regression;一次普通无效输出阻止所有后续报告继续;标准 premerge 的新模块门槛失败也未解决。user_experience:regression;设置有控件,失败后却没有可行恢复且状态不够真实。机制和代码量对接入目标总体相称,保留原生所有者的架构取舍合理,但这一恢复缺口必须先修。
在同一合成后端比较 e354 打包页面与基线;d2c 的六个前端文件及六张图片逐字节未变,因此复用桌面和窄屏观察。新上下文与实际 scoped reader 则独立重跑。未验证安装版、真实手机或真实模型/私聊送达及报告内容质量;日期 fill 不算保存证明;合成夹具 close 缺失导致退出非零。e354 的 UI/build/CSS 证据仅按未变源码复用。 窄屏默认首屏未单独捕获,已有窄屏展开态与错误恢复观察。结论仅适用于 d2c1dfcc67da425515f5d3384c24fb8201451be5;这些限制与 P2 的实际复现分别保留,没有以测试数量或截图推导长期收益,也没有合并授权。
English verdict: REQUEST_CHANGES at d2c1dfc. A known invalid editorial response still permanently strands the report window on both File and SQLite, and this head introduces a required Chat runtime maintainability failure (base passes; 2317 lines exceed the unchanged 2312 ceiling). Independent current validation: 241 Python tests, 11 TS tests and typecheck passed. Add explicit owner-directed report recovery and resolve the attributed gate without weakening unknown-outcome safeguards; six native image holds remain.
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | gpt-6.1-sol | OpenAI | runtime_reported | reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
REQUEST_CHANGES — [P1] 生成任务完成后,原 Turn 结算失败会卡住本期日报。 当前对象 d2c1dfcc67da425515f5d3384c24fb8201451be5,完整比较基线 385771e56371315976ebe1166a3c07fea8b539df;之前 e354ac2068aa326e868b10e9ab271378c22cba97 的证据只在已核对未变化处复用,不继承任何批准。
同一提交的并行评审已覆盖无效编辑回复后的失败恢复和模块预算。本文补充的是另一条已复现分支:正文已有效生成、Todo 已 DONE,但原生扣额未提交;这时不得重新调用模型来恢复。既有预算 P2 仅援引并保留,不重复提出。
动机
希望在原本人私聊按日历收到全量工作汇报的管家使用者。 以前准备管家身份后仍不能自动收到完整日报;本次接通日历、生成和原私聊发送,但生成后原生扣额暂时失败时,后续检查仍不会恢复本期报告。 正常路径能冻结授权资料、验证正文并送达;异常路径仍会把已生成但未提交的报告卡住。
本次不安装生产版本、不启用真实账号订阅、不证明真实模型报告质量或自然截止时间送达。 原窗口在生成完成与 Turn 提交之间失败后的自动恢复尚未交付,生产安装与自然周期投递也仍需独立验收。 每个窗口若停在生成完成而结算未完成,既收不到本期正文,又保留待处理窗口,后续周期无法自然推进。这里的交付目标是实际收到汇报,配置成功或生成文件存在不足以证明完成。
改动思路
日历、有限生成和投递各复用既有所有者,配置意图与派生健康状态分开,整体集成有必要;恢复必须接回原 Turn 的剩余效果,不能再造调度器或绕过提交证明。
当前 PR 的边界是显式订阅后经原管家生成并向原私聊核验投递;至少补齐生成已完成但结算未完成的原窗口恢复,安装和自然投递保持后续独立验收。
已有日历配置是用户不可推断的订阅意图,原会话绑定决定收件人;模型只写编辑内容,不能另填目标或宣称投递成功。日历和原生 Turn 负责时机、有限任务验证及结算,原私聊发送者负责逐段核验正文,设置页只是这些状态的展示。保持旧 CLI 对其他 report profile 的职责、让 portfolio-progress 由原管家消费是合理的;另建调度器、业务存储或独立发送路径都会增大权限及恢复成本。新提交修正 reader 的双参数调用,并在 all_registered 授权下通过既有上下文所有者刷新模型上下文,之后仍严格检查原来源。
| 当前路径 | 结果 |
|---|---|
| 原窗口生成、验证、原 Turn 提交、逐段核验 | 正常正文送达并推进 publication cursor |
| 生成已完成,但原 Turn 扣额暂时被拒绝 | Todo 已 DONE;后续 frontier 跳过,发送者也不能接受未提交结果 |
这是从当前代码及实测整理的路径表,不把示意图当执行证明。
具体改动
关键代码讲解
StewardReports.frontier由原有 idle producer 消费当前授权窗口,创建或读取其唯一有限生成任务,使用稳定原窗口身份提交原 Chat Turn。但第 220–221 行把非 OPEN 任务直接丢弃,导致 DONE 后尚未提交的原 Turn 没有恢复入口。validate_private_generation重建并比对冻结源、编辑响应、文档与候选,给有限任务提供独立验证。它证明生成物有效,不证明后续写回、扣额或私聊送达已经完成。LarkStewardReports._committed_turn要求原身份对应的已提交原生结果和事件;后续逐段发送/读回再推进游标。此门应保留,不能为解决卡住而把外层 Chat 的 completed 当作原生 committed。ChatRuntimeController在 report 的模型上下文准备阶段处理 all_registered 授权范围更新;由原上下文所有者更换上游上下文并记事件,保留可见原对话,再进入严格执行 admission。选定范围、撤权和调用途中变化继续拒绝。当前新增的双 Goal 用例验证这一边界,不需要用户再发送一条消息来修复模型上下文。
独立规范为 docs/product/periodic-reports.md,spec_revision 385771e56371315976ebe1166a3c07fea8b539df,使用修改前文本判断。original-private-route:正常原身份/冻结源/完整正文路径已实现;stable-window-recovery:本次复现为 not_met;owner-pause-readback:已有单次动作预览/应用、暂停及状态回读已实现;installed-natural-delivery:源代码合成集成以外的安装、真实订阅和自然送达继续单独验收,不用本 PR 新文字自证。
对主干的风险
[P1] 第 220–221 行:恢复原 Turn 必须独立于生成 Todo 是否仍 OPEN。 在 File 和 SQLite 上分别让有效报告完成其有限任务,再仅对原生 spend 返回一次明确的 ok=false, appended=false,没有产生扣额;随后恢复真实 spend 所有者。观察到正文及生成证明已存在、Todo=DONE、原生结果 failed,外层 Chat 却 completed。再运行两次正常 wake/outbound 检查,两次都是 accepted=0、delivered=0,游标仍不存在,也没有第二次模型调用。正常报告用例全部通过时仍可触发这个反例,说明不能用已覆盖的“提交后重启投递”代替“提交前恢复”。
恢复原窗口对应的未结算 Turn,沿原生所有者补完剩余写回和扣额,再由既有发送者核验投递;保持原身份,不重新生成报告、不把未提交结果伪装为 committed。 最小回归应覆盖 File/SQLite 在有限任务完成后、原生写回或扣额失败/进程中断的状态;恢复后要求原 Turn 完成、原正文只送达一次、模型仍只有一次调用,后续窗口能够继续。无需重开已完成生成任务,也不能只把失败变成成功字段。
当前提交的原生报告、私聊发送与既有管家回归 36 项通过;另外两个独立恢复断言按预期暴露上述缺口。两项 typed owner 测试、TypeScript 检查和打包 Chat 构建通过。当前精确提交的标准 premerge 仍失败:5/6 直接检查、9/10 catalog 和 8/8 risk smokes 通过;唯一代码检查问题是 chat_runtime.py 的 module metric 由 base 的 2306 增至 2317,超过未变的已评审上限 2312。另有六张 PNG 的人工视觉核验 hold。公共文本扫描通过;这不等于整个 premerge 通过。
已有 P2 的检查读回(非新增 finding)。 相同静态测量得到 base/e354 均 2306 行、当前 2317 行,已评审上限 2312 未改。按既有预算决策流程审查职责和新增语义,允许有依据地更新已评审 ceiling,或做有等价验证的局部整理;不应删权限/恢复约束凑行数,也不能把本次失败归给旧环境问题。修复后重跑原 maintainability ratchet 与标准 premerge。
早先 e354 的标准 premerge 在一个 canary 失败:私有临时目录位于仓库内,破坏“不在 Git 工作树”的夹具前提。相同命令/环境在不可变基线和该提交得到相同分支及缺文件失败,正常系统临时目录下独立直接运行通过;保留该历史红灯,不称产品修复或删断言。CI 未查询或等待。
语义与 CI 对齐
本次为 reuse_existing:复用已存在的原身份、calendar/window、Todo/Turn 完成和投递游标;Python 保持原 Chat/供应商适配职责,通用决定在 typed owner。默认关闭的共享 host 经不可变 base/current 三份完整 prompt 和六份结果 JSON 对照逐字相同,无归一化;可用性、安装或 provider-ready 不构成启用。finite completion 只在精确授权 report 中开启,原窗口和原始 lease/验证仍是硬门。新 report prompt 的内容建议不赋予发送或结算权限,通用 quota/Todo 规则未混入业务专属要求。当前缺口属于原窗口恢复义务的实现失败,需上述原生恢复用例与精确 head premerge 重跑,不能以绿色测试数代替。
我的整体评价
这是合理且整体有用的源代码集成增量,机制成本和原管家按期收到正文的问题相称,既有所有者复用也合理;但 long_horizon=regression、user_experience=regression:异常后没有续结路径,用户仍收不到承诺的报告并须人工介入,因此当前不能批准。兼容保留有真实消费者和历史回执依据,无需为了行数增加协议或进行无关重写。最高价值修复是复用原 Turn 的剩余效果恢复。
已检查实际打包页面的桌面首屏、展开日报区及下方操作,也检查390×844窄屏的展开状态区;原助手说明较密。窄屏折叠默认页和下方操作区尚缺实际像素核验,不能宣称全视口覆盖。 未验证窄屏折叠默认页和下方操作区;也未验证真实账号、手机、安装后采用及自然截止时间。截图不证明报告内容质量,新后端逻辑已另行复测。 本人通过实际 HTTP/Core 打包页面走过启用和暂停并读回 disabled,未调用模型;桌面1440×1000首屏与1200×888展开/操作区、390×844窄屏展开状态已实际检查。部分后续截图在新浏览器调用恢复为桌面尺寸,不能冒称窄屏操作证据。显示证据来自 e354,已逐 blob 核对 13 个 UI/夹具/图片路径与本次 head 不变;新后端逻辑独立复测。
本评审在 d2c1dfcc67da425515f5d3384c24fb8201451be5 补充有效生成后的结算恢复 P1,并保留已发布的无效回复恢复与预算 P2;修复后重新检查完整 PR 与原窗口恢复,再独立验收安装和自然送达。没有合并、安装、真实账号发信或追加权限。
English verdict: REQUEST_CHANGES at d2c1dfc. A valid report can finish its generation Todo before the original native debit fails. After the debit owner recovers, the OPEN-only frontier never resumes that original Turn, and the correctly strict outbound gate prevents delivery. Reproduced independently on File and SQLite through normal producer/outbound reconciliation with one model call and no publication cursor. Resume the original remaining native effects without regenerating or weakening committed-result proof. Source fixtures do not qualify production installation, live report quality or natural delivery.
…exit Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Reviewer: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; effort=max.
当前精确 head:e04ab4085aa47562b99c3b320e757bf97757eda0;完整 PR 对比当前目标基线7129efcdef7a7110bd49b760b7de8359544889ec。APPROVE:本次源代码范围无剩余阻断项。 这是作者自评的 COMMENTED 记录,不是独立贡献者批准或 GitHub 正式 approval。身份取自运行时记录,不证明模型后端或当前执行活性。
动机
原管家能看 Goal,却没有从日历到原身份生成、原私聊完整返回的日报链路。用户需要按期收到覆盖获准项目的详细汇报;配置成功、生成文件或 Todo DONE 均不能替代实际收到正文。本 PR 交付既有调度、有限生成和原路核验投递的完整连接;原业务仍由原 Agent 执行。
最强反对理由是新增集成会让“看似完成”掩盖空来源、下次范围变化停滞或生成后结算卡住。三类问题均通过实际原入口反例检查,不能用测试数、漂亮合成正文或状态持久化来代替有效结果。生产安装、真实模型质量和首个自然到期送达仍需独立验收,整体验收保持未完成。
本 PR 不代办业务,不新增调度器、事件消费者、业务存储或权限。
改动思路
复用原 Chat idle producer、原生日历/Todo/Turn、报告编辑与渲染、原回复发送者和 publication cursor。另建 cron、第二消费者或手工补办会重复所有权;通用 Goal-channel 也不能推断私聊受众。订阅时间是明确用户意图;窗口、完成和扣额来自原生 authority;健康状态只是投影。
| 状态 | 当前行为 |
|---|---|
| 已授权日历到期 | 同一原身份建立唯一有限生成任务,独立验证正文 |
| all_registered 新增 Goal | 既有上下文所有者刷新后重新严格准入;不要求新用户消息 |
| 正文已生成,写回/扣额失败或响应丢失 | 读取同一原 Turn 的 canonical 完成与效果凭据,只续剩余步骤,模型不重跑 |
| 已提交结果的外层事件丢失 | 从原 native journal 恢复真实结果,再交原发送者 |
| 已知部分消息/未知 create 结果 | 前者读回原 ID;后者保留未知,不盲发 |
该表是当前源码路径说明,不是执行证明。错误编辑回复只有原主人显式取消时才退休窗口:原 Todo blocked、失败/成本/产物保留,publication 不伪造成功。取消后同一窗口不重放,下个独立周期可继续。未知模型或发送结果不能走此出口。
具体改动
关键代码讲解
- StewardReports.frontier 在现有 producer 内处理到期窗口;生成 Todo DONE 时转入原 Turn 的结算恢复,而不是跳过或重开任务。
- StewardTurnHost.recover_report_settlement 绑定原 actor/window/Todo/Turn,验证冻结产物与当前订阅,使用原 journal inspection/run-once。typed owner 必须证明 no-host continuation;传入的模型 runner 无条件拒绝调用。
- completion_writeback 使用既有 typed completion fence 读取同一 Turn 已完成的 canonical Todo,补缺失事件并仅续 refresh;不拿已退休 lease 重复提交完成操作,也不放宽不同 Turn 的凭据门。
- validate_private_generation 重建并比对完整来源、编辑响应、正文、窗口与候选 lineage,防止漂亮正文或别的 Goal 候选冒充本期生成。
- LarkStewardReports.reconcile 继续要求真实 native committed,每段复查原授权并读回全文;仅完整核验后推进 cursor。恢复不绕过此门。
语义与CI对齐
spec_ref: docs/product/periodic-reports.md
spec_revision: 385771e
以修改前已接受的文档为独立依据,不用本 PR 重写后的文字自证:original-actor、calendar-window、authored-body、verified-return、pause-recovery 均通过原身份/日历/来源/原投递及恢复路径实现;adoption-natural-deadline 继续 deferred,原因是源代码评审无法证明未来生产事件。
原生报告/发送/host/monitor/日历 suite 173 passed;共享 Turn、效果恢复、settlement parity 和完成投影 192 passed;最终变化的恢复分支与新增下一窗口断言 11 passed;typed owner 2 passed。十个 File/SQLite 用例覆盖 writeback/debit 明确拒绝、已提交响应丢失和外层结果事件丢失:原 key 不变、原正文不变、模型仍一次、全文只投递一次,下一周期也可提交。普通完成 crash 用例保留一个真实完成操作和一个完成事件。合成模型/供应商边界明确,不证明实际编辑质量。
当前完整 PR premerge 6 个 direct、19 个 selected 全部通过,代码和边界失败为0;9 张 PNG 保留 manual_review_required,逐张像素、尺寸、SHA、合成来源已人工核验,不改写为机器绿色。TypeScript、Chat 打包及 CSS 已通过;本轮 backend-only 改动与旧 UI/图片 blob 无交集,因此按来源复用。普通 host 的3份完整 prompt、9份完整结果与不可变基线相同;这是 prompt/result 对照,不宣称 API、IO 或所有内部回调逐字相同。共享恢复现在读已提交的完成凭据,正常成功行为和外部事件/效果不变。
早先213/254测试只按原 revision 和输入未变范围复用,不冒充当前173/192。主干7129新增的研究展示修改与本 PR43路径没有交集;重新检查完整 diff 和当前 premerge。CI 按实际 policy 未查询或等待。
对主干的风险
对 review5634880173 的两项 P2:已知无效编辑无法恢复,已通过原取消/原生 blocked/cadence retirement 修复,File/SQLite 保留失败并可达下一窗口;chat_runtime2317 超2312,则删除重复 report context event、复用既有 manager.context/Session 后降为2309,未提高 ceiling。不可变 d2c 的负向恢复检查仍失败,当前用例通过。
对 review5634914934 的 P1:有效生成后结算失败导致永久停住,已接回同一 native Turn 的剩余效果。不可变764在恢复原扣额所有者后仍无投递;当前十分支与下一窗口检查通过。修复过程保留 retired-lease 重复提交被拒绝的红灯;最后采用 canonical readback,没有删除 fence、重新开 DONE Todo 或伪造 committed。
普通 Turn 回归曾有一项要求完成 callback 再调用一次;实际最终状态已正确提交,改为验证只发生一次 canonical 完成和一次事件。下一窗口夹具最初放到真实未来而被独立校验拒绝,已将两个测试周期均置过去,保留未来准入检查。早先 canary 的仓库内临时目录假设失败、空来源反例和错误浏览器尺寸均保留历史,未当成成功证据。
晚到撤权、计划变更、foreign candidate、产物损坏、未知发送继续阻断;实际 journal 不能证明 no-host remaining effects 时也不恢复。新增可信 projection 不是模型提供的权限,没有新调度器、消费者、业务存储、scheduler floor 或扣额规则。新 profile 的 optional retirement 与服务同版部署;回滚前暂停新订阅并保留新产物,不声称旧二进制能读取新字段。生产自然送达和模型内容质量仍是实质剩余限制。
我的整体评价
从完整用户结果重新判断:该增量把缺失的原生日历报告接回既有权威,并覆盖了后续范围、已知生成失败及生成后结算恢复;长期价值是减少反复人工触发与漏报。机制与问题相称,原生 journal/完成/投递所有者继续负责各自决定,未为评审反复增加旁路。
9 张图均核验:桌面首屏、展开设置、长报告/下方动作,390×844 窄屏默认与展开/取消状态。六张正常截图保留 e354 原 revision,三张恢复截图来自764;后续仅后端结算修改,相关 UI/夹具/图片 blob 未变。实际 HTTP/Core 页面走过启用、暂停、取消、同计划恢复及 unavailable/reload;不把 viewport 模拟说成真实手机,不把合成内容说成生产报告。原管家说明区域仍较密,正文与动作可滚动到达。
本次可在独立合并授权与新鲜 closeout/readiness 后合并源代码;随后安装采用、启用原订阅并独立等待首个自然到期原私聊读回。两个既有评审和所有失败证据保留,没有删除讨论来获得批准。
English verdict: APPROVE this exact source increment. Whole-PR review covers real scoped sources, future-subject context, known-invalid cancellation, same-original native settlement recovery without model replay, and verified full-body return. File/SQLite recovery includes rejected effects, committed responses lost, outer event loss and later windows. Local validation passed with nine explicitly qualified manual image holds. Production adoption, live report quality and the first natural deadline remain separate acceptance; this author-owned COMMENTED review is not formal GitHub approval.
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | gpt-6.1-sol | OpenAI | runtime_reported | reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
REQUEST_CHANGES — [P2] 报告生成后新增已授权 Goal,会卡住原窗口和后续计划。 对象 e04ab4085aa47562b99c3b320e757bf97757eda0;本次从 OPEN 状态入场复测,期间该提交已由其他维护者合入(merge 3378f28d1210341affc96020a4f0336164f3a8a6)。这是本次在途评审新发现的反例,保留已有批准与修复记录,不表示当前 PR 仍待合并。
动机
希望在原本人私聊按日历收到完整工作汇报的管家使用者。 原有结算失败和已知无效回复的恢复已修复;但报告生成后新增已授权 Goal,原授权未变,仍会卡住旧报告及以后的计划。 正常正文与原结算恢复能够完成;新增已授权项目后的旧窗口仍没有安全继续或取消退出路径。
报告生成后新增一个已授权 Goal,就可能让旧报告不能发、取消后也不能换计划,后续每个周期都需要人工排障。 本评审不安装生产版本、不启用真实订阅、不证明真实模型质量或自然截止时间送达,也不执行源代码修复或合并。 原绑定及 all_registered 授权不变时,新增项目仍可能永久阻塞已生成未发送的窗口;实际安装和自然周期采用仍待独立验收。 生成成功、原生提交和完整正文实际送达仍须分别成立。
改动思路
日历、原生 Turn 与私聊投递继续复用各自所有者,组合有必要;新增窗口退休和原结算恢复应保留,授权范围变化后的安全继续或取消也必须由同一窗口所有者负责。
当前 PR 的边界是显式订阅后的原身份生成、原生提交及原私聊完整核验投递;安装、真实内容质量和自然到期保持独立验收,已知未发送窗口不能永久封死后续计划。
配置经现有原管家设置进入原生日历,有限 Todo 在原会话生成并独立验证正文;native journal 负责写回、扣额和恢复,原私聊发送者逐段核验后才推进 cursor。source-bound Python 适配器与 typed admission 分工合理,无需另建调度器、发送者或业务存储。订阅时间是用户意图,健康状态是投影,模型内容不是权限证明。
| 当前触发 | 实际结果 |
|---|---|
| 有效正文,原 native 写回或扣额临时失败 | 同一 Turn 补完剩余效果,模型不重跑 |
| 已知无效编辑回复,本人取消失败窗口 | 保留失败,退休旧窗口,后续周期可继续 |
| 有效正文已提交、尚未发送,此时新增已授权 Goal | 当前范围指纹变化,发送被拒绝;取消不退休,换未来计划仍被拒绝 |
该表来自源码及隔离实测,不代替生产采用证据。
具体改动
关键代码讲解
StewardReports.frontier对 DONE 生成任务接回recover_report_settlement,核对原 actor/window/Todo/key,并只准 native journal 已证明不会再调用模型的剩余步骤。completion_writeback先用原 completion fence 读取同一 Turn 的 canonical 完成,补缺事件后续写回,避免再次提交已退休 lease。共享路径由当前原生回归覆盖;并非仅比较 prompt。StewardReports.delivery_current第175–178行把完整当前 Goal 集合指纹与冻结请求相等作为发送门。all_registered下只增加一个已授权 Goal,旧资料权限仍在,指纹也会不同。_known_generation_failure在存在private-generation.json时返回空,因此上述有效但已知未发送的窗口不能走取消退休;planStewardReport又要求旧窗口核验发布后才允许换订阅版本。LarkStewardReports.reconcile正确保留 committed、原路、每段当前授权和全正文核验门;这个门不能为解除卡住而删除。
独立依据为修改前 docs/product/periodic-reports.md,spec_revision 385771e56371315976ebe1166a3c07fea8b539df。以下是本评审映射键:original-private-route 对应 Daily portfolio report,正常原身份、冻结资料与正文核验已实现;stable-window-recovery 对应 Implementation order and acceptance 的恢复要求,新反例 not_met;owner-pause-readback 的设置与已知无效窗口取消已实现;installed-natural-delivery 的生产安装、内容质量与首次自然到期仍 deferred。不以本 PR 新文字自证。
对主干的风险
[P2] 第175–178行:授权项目集合增长后,保留窗口需要可行的继续或取消出口。 在 File 与默认 SQLite 分别通过真实 native 路径完成有效报告,确认 original native=committed、正文已冻结、尚无 private-delivery.json。随后通过普通新管家准备路径注册第二个已授权 Goal,断言原 binding 和 grant 逐字节不变。原 outbound 检查返回 delivered=0,无 cursor,也没有发送尝试。本人 cancel 应用成功,但 retires_failed_window=false;将首次日期改成任一未来新计划,preview 报 the original frozen report still requires verified private delivery。旧正文保留,未重跑报告模型。两个 provider 的独立 oracle 均在“取消后应可开始后续计划”处失败。
这不是要求在撤权后继续发报告。沿既有 typed 窗口所有者提供安全出口:对只增加已授权项目而未撤销旧资料权限的变化重新核验原冻结范围,或允许本人明确取消已知未发送窗口并退休原窗口;保留原正文、失败与成本,不放宽真实撤权、部分或未知发送的保护。 最小回归要覆盖新增 Goal 发生在生成之后、第一次发送之前,再验证后续独立窗口;已有“生成前刷新 all_registered 上下文”不能覆盖该时序。未知/部分发送、真正撤权与旧 Goal 身份替换仍须拒绝或先读回。
原评审三项问题分别核验:有效生成后结算失败的独立 File/SQLite 反例当前 2 passed;已知无效回复的原取消/退休和后续周期用例通过,实际页面也走通;Chat runtime 模块预算的原生 ratchet 已通过,未增加 ceiling。原 d2c/764 失败记录保留。现有 e04 批准记录也保留;它覆盖的生成前范围刷新和 native 结算恢复,不覆盖本次生成后的范围增长反例。
当前10个原生报告/发送/监控/Turn/效果恢复模块 303 passed;另有上面的独立旧恢复 2 passed,新库存时序 2 failed。typed report 2 passed,typecheck 和 Chat 打包通过,现有大 bundle 提示保留。标准 premerge 为 6/6 direct、19 selected 自动检查通过,0失败;9张 PNG 仍令 aggregate 为 manual_review_required,不称整个 gate 已绿。文本公共边界检查通过;3张新增图片本轮查看像素,6张与上次已检查图片 blob 相同。CI 未查询、轮询或等待。
语义与 CI 对齐
采用 reuse_existing。原身份、window、Todo/Turn、completion fence 和 cursor 仍各有 canonical 所有者,report retirement 是局部扩展,未赋予模型或 provider 新权限。普通 host 在不可变基线/当前转换器的 3份完整 prompt、6份完整结果一致,无归一化;两边依赖均解析当前 checkout,因此只宣称转换边界相等。共享 completion 的实际正常与恢复路径另由98项原生测试覆盖。默认关闭、不把可用性当启用、内容建议不等同机器义务、通用 quota/Todo 保持领域中立均已检查。当前缺口是新 source 指纹与已知失败退休条件组合后的状态出口缺失,不能用 UI 状态或单独的成功用例替代修复。
我的整体评价
当前实际打包页已检查390×844默认首屏、展开下方动作及失败取消;1200×888取消结果也已查看。原普通助手说明仍较密,报告状态与动作可滚动到达。 未验证真实手机、账号、供应商、模型内容质量和安装后自然截止时间。九张公开图片保留人工核验分类;三张变化图片本轮查看,六张与上次已检查的图片逐字节相同。
long_horizon:regression,普通授权项目增长可让后续每个报告周期失去推进路径;user_experience:regression,取消返回成功后仍无法安排下一期。整个43文件增量(+2207/-81、含9张图)的原所有者复用和代码量总体相称,原 native 恢复与取消改进应保留,但仍需补齐本次安全退出。
本轮实际打包 HTTP/Core 页面检查390×844默认首屏、展开下方操作、生成失败及本人取消,另看1200×888结果;原管家和可见历史保留,取消没有伪造送达。普通助手说明仍较密,字段与动作可滚动到达。初次 date fill 未持久化,所以过去截止时间通过该合成夹具的原生 exact-plan HTTP 设置;没有据此声称日期输入保存已验证。模型、provider 都是合成,viewport 也不等于真实手机。夹具退出0,9张图保持人工核验分类。
PR已合入,以上新问题需要在现有窗口所有者修复后重新验证;本轮没有执行修复、合并、安装或通知他人。整体验收与生产自然投递不因此完成。
English verdict: REQUEST_CHANGES at e04ab40, reported after another maintainer merged this unchanged head during the admitted review. On both File and SQLite, adding an authorized Goal after valid generation but before the first send changes the source fingerprint while the original grant remains identical; delivery stops, cancellation does not retire the window, and every changed future schedule remains blocked. Add a safe original-scope revalidation or explicit known-unsent retirement without weakening revocation/unknown-send guards. The prior settlement/invalid-output/budget defects are separately resolved; production adoption and natural delivery remain unqualified.
| expected = json.loads((attempt_directory(self.root, window) / "editorial-request.json").read_text()) | ||
| current = manager_authorization_scope_id_for_registry(self.controller.registry_path, | ||
| self.bindings.steward_scope(session), runtime_root=self.root, channel_id=session["channel_id"]) | ||
| return current == expected["authorization_scope_id"] |
There was a problem hiding this comment.
[P2] 新增已授权 Goal 后,需要让已知未发送窗口安全继续或退出。File/SQLite 均复现:有效报告已 native committed 且尚无投递记录,此时通过正常路径增加已授权 Goal,原 binding/grant 逐字节不变,但此处完整范围指纹不等,发送返回0;显式 cancel 成功但 private-generation 使 known-failure 退休不适用,未来新计划仍被 report_window_pending 拒绝。请在原窗口所有者重新核验仍被授权的冻结范围,或允许本人明确退休已知未发送窗口,保持撤权和未知/部分发送保护。完整反例与已解决的旧问题见本评审正文。
Prepared stewards could observe Goal state, but a due calendar window had no complete route through the original actor to an authored private report. This connects that route to the existing Chat wake producer, native Todo/Turn settlement, periodic-report generation and original Lark reply owner.
Validation of the final scoped inputs: 173 native/report/cadence tests, 192 generic Turn/recovery/completion tests, 11 final changed-case checks and 2 typed-owner tests passed. File/SQLite cover valid generation followed by rejected writeback/debit, committed effect responses lost, and a lost outer native result event. The normal producer resumes only the same native Turn's remaining effects; original content/key/history remain, model calls stay at one and full delivery occurs once. The following distinct window also progresses. Canonical completion is read back instead of resubmitted with an already-retired lease.
Known-invalid editorial recovery retains its native failure, blocked unfinished Todo and immutable artifacts after explicit owner cancellation. Same-window replay is prevented; unknown sends cannot be retired. Immutable d2c reproduces that old failure, immutable764 reproduces post-generation settlement stagnation, and immutable e354 reproduces an empty actual inventory. Three complete default host prompts and nine results match the immutable base. TypeScript, packaged Chat build and unchanged CSS checks passed. The latest-main research display change has no changed path overlap; whole-PR diff and premerge were rechecked. Earlier test evidence retains its own revision, with final changed branches rerun separately.
Exact-head local premerge: all 6 direct and19 selected checks passed. Nine binary-image holds were manually qualified by pixel, dimension, SHA and synthetic-only metadata inspection; the machine gate is truthfully retained as manual_review_required. The Chat module was reduced2317→2309 under the unchanged2312 ceiling. Scoped public text checks passed; separate unavailable legacy authorities are not a global-green claim. Remote CI is not consulted under current policy.
The original model-context owner now refreshes a changed all-registered report context without a new user message. Ordinary/default host behavior and late revocation/unknown-result safeguards remain. The synthetic original wake/outbound journey proves transport mechanics, not real report quality.
Production installation, the live subscription and a natural deadline delivery remain separate acceptance events. The fixture proves mechanics with a synthetic model/provider; it does not certify real report quality or phone delivery.
Visual evidence uses packaged baseline
bd67d651and candidatee354ac2068aa326e868b10e9ab271378c22cba97with actual HTTP/Core storage. All operating context is synthetic; the narrow viewport is 390×844 emulation.Activation and acceptance boundaries
Final recovery UI at 764422d: the default narrow page, retained cancelled window and same-plan resume were checked against actual HTTP/Core storage; one failed model call remains one, with no report send or publication cursor.