Repository navigation
fix(lark): keep owner notices readable across upgrades - #6675
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.1-sol; OpenAI; runtime_reported; reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
精确审查头:2bad4a4fb409c1a1864aa19d375da196b715ead6。没有阻塞问题。
动机
个人管家收到新的本人待办时,通知的收件人需要读清要求并决定下一步。此前提醒在完整待办后附上决定范围的机器 JSON;现在保留原作者要求,只去掉自动追加的协议字段。提醒正文不再展示内部范围 JSON,原待办正文、说明、原因和依据保持完整。这次只收尾提醒文案,不替用户审批,也不改变待办完成、交办回传、重试或授权规则。原链路已能自动发现、发送和读回;本次针对实际消息中暴露的可读性问题,避免后续每条确认都向用户展示内部协议。做成新的手工转发流程会增加人工介入,也无法修复产品默认文案。
改动思路
正文投影继续由现有 typed planner 负责;去重使用完整原始条款,两者无需新增状态或第二个渲染器。本 PR 只移除自动附加的结构化范围展示,并验证持久回执兼容;发现、路由和发送仍归原服务。从设置开启到普通后台工作器、原生待办读取、共享规划器、冻结发送意图及独立读回,调用链完整沿用。开启时的新提醒使用新文案;关闭时后台不扫描,原四个回复槽位保留。若源条款未变,规划器保留原条目,重启不重新生成旧正文。这里没有必要增加新模板服务、协议版本、配置项或迁移历史消息;正文投影与权威条款应各守原有职责。
具体改动
规范依据:loopx/capabilities/manager_context/README.md#automatic-owner-task-notifications,spec_revision=d80a38e5f2e874231fbd8c241456ab5a58a31686。以修改前的合同验收:exact-native-source 已实现,完整原生正文先恢复再呈现;frozen-intent-and-readback 已实现,原意图、身份和完整文本独立读回;optional-automatic-service 已实现,显式开启、默认关闭且不产生模型请求或第二消费者。本次五行说明用于解释新文案,没有把合同改写成放宽验收。
关键代码讲解
planOwnerAttention在构造正文时仅附上说明、原因和依据。上游构造 canonical terms 的列表仍包含两类结构化范围,因此只有范围改变时也能产生新的实质变更,而不能靠改文案绕出去重。LarkOwnerAttention._plan仍把原生完整快照交给同一个 TypeScript owner。Python 没有新增渲染判断;发送、原始收件会话和回执仍由原适配器核验。
现有测试文件新增两项回归:完整作者字段及 canonical digest 对照、旧 pending/unconfirmed/delivered 状态重启保留。文档说明机器范围留在身份判断,历史意图不改写。三个文件共 46 增、3 删,生产变化仅替换正文列表并补一条注释;没有生成物或私有证据进入提交。
对主干的风险
最重要的反例是升级改变身份或重写冻结意图,导致同一确认重复发送。新测试把旧格式正文和实际冻结过程序列化再恢复,验证原消息与 intent 完整不动;同时独立计算包含范围的 canonical hash,防止只为缩短正文而删掉去重输入。真实 HTTP 设置接口、原生 File 读取器、普通服务工作器和实际持久回执在同一合成输入下作基线/新头对照:基线能投递但可读性断言失败,新头投递一次且断言通过;关闭态的返回和零副作用一致。外部飞书 IO 在这组对照中是合成 provider,未将其称作新的真实用户送达。
本头通过 8 项 TS 通知测试、19 项 File/SQLite 服务测试、控制面类型检查、语义清单检查及标准 premerge 的 15 项检查,差异和公开边界检查通过。后补 HTTP 对照证明了生产入口的回归敏感性。预提交检查与已提交三个文件字节一致;Goal 的 change-quality 策略实际关闭。按当前策略未查询或等待远端 CI。已安装服务的真实历史提醒、原会话和去重回执作只读核对,没有改写或重发。新增自然待办的新格式线上送达留待实际发生,安装采用是后续独立验收。
语义与 CI 对齐
本次 reuse_existing:沿用现有 typed 身份和通知状态,不扩展词汇、协议或执行义务。语义探针没有发现受支持的新词汇载体,完整清单检查通过;这个结果只覆盖探针能力,实际判断还依据完整 diff、调用者和上述真实入口对照。
我的整体评价
正文投影继续由现有 typed planner 负责;去重使用完整原始条款,两者无需新增状态或第二个渲染器。本 PR 只移除自动附加的结构化范围展示,并验证持久回执兼容;发现、路由和发送仍归原服务。long_horizon=preserved:旧冻结意图与 canonical digest 保持,后续重启继续原读回流程;user_experience=improved:原作者要求完整保留,自动消息更容易读懂,既有意图和授权下不新增导航、复制或确认轮次。最小修复已在原 owner 内完成,兼容只保留实际持久回执,没有新增旧请求解码分支。对这项提醒文案收尾判定 goal_achieved,不据此声明用户审批、交办结果、停止时延或社区准出完成。正常包采用与真实未来新消息的观察仍各自留有证据边界。
English verdict: APPROVE - 2bad4a4; readable owner notices preserve canonical scope identity and frozen delivery facts. Base/head HTTP counterexample, disabled parity, 8 planner tests, 19 provider tests, typecheck, semantic inventory and risk-based premerge passed. No blocking finding.
Automatic private-steward notices currently append structured decision-scope JSON to the human message. This keeps the complete authored task, explanation, reason and evidence visible while retaining structured scopes in canonical change detection and authority checks.
The existing planner and provider journal remain the owners. Already pending, unknown or delivered notices retain their frozen content across restart, so the presentation change cannot resend an unchanged task.
Validation: 8 notification planner tests; 19 existing File/SQLite provider tests; control-plane TypeScript typecheck; semantic inventory check; standard risk-based premerge (15 selected checks, no failures). The new readable-message assertion fails on the base implementation. Exact-source read-only rendering also preserves the original canonical ID/digest and existing cold receipt. This changes notification copy only; it makes no claim about human approval or completion of the underlying task.