Repository navigation
fix(control-plane): recover receipt-bound lifecycle review closeouts - #7624
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.
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
动机 / Motivation
[P1] 必需的完整 TS 套件尚未取得资格。 npm run -s test:control-plane 在预览桥接测试中挂起超过 30 分钟,终止本次拥有的停滞子进程后得到 5633 PASS、1 FAIL、75 SKIP。这是验证缺口,目前没有证据把它说成本 PR 的具体运行时代码缺陷,也没有证明它与本 PR 无关。最低修复是保留原失败,在可比并发条件下取得不可变基线与 head 的归因证据,或修复已确认的回归,再运行必需检查;不应靠放宽时限或仅选绿色重跑消除这条记录。
完成任务后恢复原 Turn 收尾的 CLI 使用者和 Agent。已完成的任务在同一 Turn 重入收尾时,旧路径可能拒绝原回执身份;旧的 blocked 记录若缺少语义资格,又无法重新读取所需上下文。新路径按原始身份补齐证明,让同一轮收尾继续,避免重做任务或重复扣额。File 和 SQLite 的真实 CLI 对照验证了原轮恢复、单次扣额与重放,原历史记录保持不变。本次不授予新执行或合并权限,不修改存储格式,不证明已安装宿主、多 Agent 接收采用或端到端成本收益。
完整并发 TS 套件仍有未归因挂起,当前交付资格未通过;已安装宿主及后续实际工作采用也未由本次源码验证。
改动思路 / Approach
这个修复复用既有原轮回执与语义判定 owner。任务完成证明仍来自 canonical completion transition;是否可以恢复,由 TypeScript 检查 actor、原始 Turn、source、时间顺序和两种既有 completion recovery。Python 只读取当前提交回执、是否已有 spend,以及选中的 source guard,不能自行宣布恢复成功。
缺失语义资格的 blocked 旧记录,仅在实际 committed、没有 ACK、没有 debit 且仍匹配原 source 时获得重新读上下文的入口。refreshRecovery 随后仍要求相同 judgment,没有新的状态变更或后来的 vision,才返回既有 supplement_checkpoint。它补充原轮证明,不覆盖旧 run,也不制造新的执行器。资格、读回和补充这几个连接点共同完成一个真实 CLI 恢复路径;继续拆成只有字段或 serializer 的提交,不能交付该结果。架构判断为 retain,当前边界为源码 CLI 恢复,完整验证门仍失败,已安装宿主采用与收益没有取得资格。
以下是精确 head 的独立执行对照;表格表示测试观察,不表示模型采用或生产安装:
| 路径(File 与 SQLite) | 不可变基线 | 当前 head |
|---|---|---|
| 普通 delivery 与已有 lifecycle-key 收尾 | 4 PASS | 4 PASS |
| 原 Turn 收尾及旧 blocked 原 Turn 收尾 | 4 次 identity conflict | 4 PASS |
| 用原本合法的 lifecycle-key 单独隔离缺失资格问题 | 2 次 checkpoint_context_not_missing | 2 PASS |
具体改动 / Changes
关键代码讲解
完整 base-to-head 为 14 文件 +218/-13,包括 7 个 runtime 文件、一行按需查阅的修复指南及 6 个现有测试文件。qualify_replan_writeback 不再因 selected source 无法重建而跳过资格检查;这条反向拒绝路径很关键,否则“能恢复”可能变成“没有证明也放行”。evaluateCheckpointReadContext 仅增加精确 committed/no-spend blocked source 的读取分支,仍验证 provider lineage、任务和当前 source。refreshRecovery 使用原 judgment 的补充路径,禁止夹带新 mutation 或 later vision,并保留 replay 拒绝与已完成效果的处理。
采用规范 docs/reference/protocols/goal-vision-replan-contract-v0.md,精确版本 ce4c78088ea464cb31231513882bed6bb6933156。以下标签标识其中未编号的条款:completed-todo-lifecycle-reentry 在 replan_semantics.ts 复用 TODO_COMPLETION_RECOVERIES 的两个值;source-qualified-replan 由实际 source qualifier 和缺失重建拒绝证明;original-effects-once 由同轮读回、原始历史 bytes 不变、验证只执行一次及单次 debit/replay 证明。另核对同版 effect interpreter RFC 与 Todo/Turn 契约中的原效果顺序。没有增加新的持久化版本、默认配置、权限或独立产品入口。
独立运行共捕获 314 次真实 CLI subprocess 调用。两个源码版本使用相同 fixture 与解释器归属断言;只有构造旧坏状态时故意注入旧 qualifier 缺漏,恢复本身经过真实 owner。普通与 lifecycle-key 四条控制旅程各比较完整的 19 次调用包,保留字段结构、null、布尔、错误、修复命令和剩余 argv;仅规范化临时路径、观察时间、非负观察 staleness、稳定别名的随机 ID/digest。压缩的 scheduler host-facts 先解码再比较完整 JSON,四条均无未分类差异,ID 映射冲突为零。原始包并非逐字相同;这些对照不支持性能或模型理解收益。
对主干的风险 / Risks
PASS:66 项相关 Python、45 项 focused TS、隔离真实 PostgreSQL 16.2 的 380 项(零跳过)、Ruff、配置范围 mypy、TS typecheck、Python compile 与精确 diff 检查。PostgreSQL 服务及数据均为本次独立临时实例,已经停止;没有触碰活动 Goal 或共享数据库。default 完整套件的 75 个环境门控跳过没有记成通过,真实 PostgreSQL 路径由上述独立执行覆盖。
FAIL:完整 TS 套件的预览桥接挂起。该测试与 bridge 源码在基线/head 完全相同,但仅凭相同源码不能排除本 PR 的测试开销影响并发条件。随后基线两次、head 两次单文件测试均为 10/10 PASS,使用 60 秒测试界限;它们只说明隔离运行未复现,不能覆盖原始四 worker 完整套件条件。因此归因为 unresolved,没有宣称旧问题已修复或已证明无关。精确 diff 的 CQR 回执为 fail,保留这一必需验证阻断;standard premerge 的 6 项直接检查及 18 项选中检查均通过,但严格 CQR 门准确读回为 quality_invalid_receipt,整体 gate 仍失败,没有被这些绿色检查覆盖。
语义与 CI 对齐
源码复用既有 closed vocabulary,新增 request facts 均由 canonical 证据推导;没有 substring/prose 分类,也没有把自动化成功当作授权。普通控制分支保持原义,改变的是精确旧状态的恢复资格和缺失 source 的 fail-closed 行为。修复指南新增一条按需解释,actor、顺序、原始证明、停止条件与禁止重复扣额的义务均保留;它是 guidance,运行时校验是 enforced obligation。diff-scoped advisory 没检测到支持的新增 vocabulary carrier,但该结果不证明语义检查完备。本轮不获取、轮询或等待远端 CI。
我的整体评价 / Verdict
REQUEST_CHANGES。 架构与有界修复结果成立:现有 typed owner 承接原轮收尾,真实 CLI 对照验证了后续 durable writeback、单次扣额和 replay,属于 justified_increment。long_horizon 与 user_experience 的源码 CLI 路径为 improved,已有上下文与权限足以完成恢复,没有新增人工配置或确认轮次;已安装宿主、实际 Agent 后续工作和完整成本收益仍未验证。父目标的接收采用与原始结果返回义务没有因本 PR 消失。
阻断来自未归因的必需完整套件失败,不能由 focused 绿色覆盖。重新评审所需是相同并发 workload 的归因/修复证据和完整检查结果;若能独立证明故障在未变因果路径中先已存在,应保留单独质量/合并 hold,而不是要求本 PR 修复无关代码。有界整理已复用既有 recovery 枚举和窄 predicate,未发现需要扩大传输框架或另建恢复 owner 的理由。
已检查受影响 CLI/typed 路径与 companion surface 归属,没有渲染页面、控件或布局变化,视觉评审不适用,视觉未验证范围为 none;安装后的 App/Lark 执行不在本次源码资格内。本次没有执行安装、合并或更改他人的 review。
English verdict: REQUEST_CHANGES — a668b4c. The scoped lifecycle recovery is supported by real base/head CLI evidence and isolated PostgreSQL validation. The required full TS suite still has an unresolved concurrent preview-bridge hang; passing isolated reruns do not establish unrelatedness or qualification.
原 Todo 在生命周期复核入场后,用原 Turn 完成最终 no-follow-up 收尾时,复核重入会误报身份冲突。与此同时,已选中 replan 的写回在无法重建来源时可能落入普通未来义务分支,提交没有语义 ACK 的 blocked 记录,随后卡在结算。
本次统一使用现有 completion-recovery vocabulary 重建两种合法收尾,并让所有已选中的 replan 在写入前经过同一来源校验。对历史上已提交、没有扣费且缺少资格校验的 blocked 写回,复用原生 checkpoint-context / supplement_checkpoint 做精确追加恢复:重读当前来源,只接受原身份及原判断,不执行任务变更,不覆盖旧记录,也不改写既有扣费。readback 与 checkpoint 共用同一个判定;身份、来源版本、后续 vision 和重复执行的拒绝条件保留。
验证:
范围与限制:没有改动存储 backend、评分、宿主权限或调度周期。本地未配置独立 PostgreSQL 环境,75 项本地 skipped 保留;另已核对该精确提交的 真实 PostgreSQL authority CI 完成并通过。其余 build / chat-bundle CI 仍待完成。运行时改动按仓库规则等待维护者审核和合并授权。