Repository navigation
fix(settlement): keep validated completion actionable through model closeout - #7530
Conversation
…seout Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
… receipts Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…tion drafts Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
… host routes Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…ents 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)
Exact head: 551c525; base: 322591f.
动机 / Motivation
执行带Turn身份Todo完成的Agent,需要在原任务验证成功后继续同一轮写回与记账。
旧版本普通完成只返回验证回执,调用方缺少下一条命令及vision格式;新版本返回同一身份的结算计划,普通完成仍与扣额后的最终终结分开。
File/SQLite在heartbeat与visible-goal两种来源的真实CLI对照均补齐下一写回命令、vision schema与原扣额来源,validator每次仅执行一次。
不增加终态、验证或扣额权限,不声明完整22场景/44actor/六对照真实模型门、正式安装或发布已通过。
剩余缺口是完整真实模型release资格和正式宿主采用;本次不以源码或scripted transport通过关闭它们。
改动思路 / Approach
生产CLI只把既有TypeScript结算owner的进度、原身份命令及vision格式投影出来;诊断actor复用现有OS隔离shell,不新增生产状态规则或另一套执行器。
本PR交付普通完成后的可用收尾读回和对应诊断host修复,不证明完整release的真实模型资格、正式安装或长期净收益。
普通完成可在验证阶段执行,其独立回执只前进到validation;writeback、spend及最后的--no-follow-up仍须按原顺序进行。后到的receipt推进同一计划,不应丢弃原command templates;需要material vision时沿既有schema在隔离workspace写草稿。draft shell不能调用LoopX,生产CLI仍使用原身份、声明、租约和受支持存储owner。
具体改动 / Changes
独立合同为 docs/reference/canonical-terminal-review.md,spec revision 322591f;operate-and-recover、quota-bound-cli-completion、wire-and-migration-boundary三项在本head实现并验证。三份文档分别补齐成功完成读回与显式诊断host的执行边界,没有改变promotion门。
关键代码讲解
- handle_todo_command 仅在成功、非dry-run、带Turn的ordinary completion后附加TS进度;只在仍欠durable_writeback时返回完整计划和下一命令。
_todo_settlement_plan保留实际quota_spend_source,visible-goal不会被改写成heartbeat。 - _execute_todo_completion 分开普通完成和终态条件,验证实际committed receipt前缀;缺独立验证、错误Goal/Agent/Todo/Turn、提前no-follow-up或spend均不能合格。
- _execute_terminal_workspace 复用原
VisionShellHost,proof之前不能读,writeback之后不能回退编辑;原输入、authority与workspace外文件受OS隔离保护。host失败转为fixture代码,避免把CLI或模型文本存入资格回执。
对主干的风险 / Risks
| 检查 | 独立结果 |
|---|---|
| 完整四模块 | 251 passed in 1113.56s (0:18:33) |
| ordinary completion 4组base/head | base无后续计划;head原身份、schema与来源完整,validator一次 |
| 标准premerge | 6直接、18选中通过;1输出smoke在120秒超时 |
| 同一120秒上限的独立输出检查 | base 47.992s、head 111.853s通过;原timeout保留 |
输出smoke测量status/quota/读取投影,并不执行新增ordinary-completion分支;首轮与另两个验证批次并行,后续同源码、同120秒上限的base/head均完整通过,未删除断言或提高deadline。head耗时111.853秒、base47.992秒,仅是不同运行时刻的观测,精确差异原因未证,不证明性能parity或改善。当前完整检查与251项真实相关测试覆盖修改的不变量,原122.639秒timeout和历史整套premerge未通过仍保留;这不是原失败已修复或持续稳定性的声明。维护者合并仍应消费当前独立资格。最强负例包括缺proof/receipt、身份和foreign route拒绝、提前spend/no-follow-up以及原proof和workspace外产物覆盖被拒绝。
非阻塞说明:新文档称所有foreign Turn都会拒绝,范围写得偏宽。独立将首个guard的--turn-instance-id改为另一个字面值,base和head均被既有bridge重写为fixture Turn后获得qualification_passed;这不证明模型保留了首guard身份。建议将该句限定为guard后的身份绑定操作,首guard负例留在既有诊断owner补验;没有把这个历史限制当作新产品回归或要求修改生产结算owner。
我的整体评价 / Verdict
APPROVE,无本次引入的阻塞发现。这是完整可用的CLI恢复增量:真实完成后能找到后续命令与authoring格式,避免重新准入或人工重建身份;后续重复结算、提前终结、声明与lease约束仍有真实路径覆盖。生产CLI只把既有TypeScript结算owner的进度、原身份命令及vision格式投影出来;诊断actor复用现有OS隔离shell,不新增生产状态规则或另一套执行器。 本PR交付普通完成后的可用收尾读回和对应诊断host修复,不证明完整release的真实模型资格、正式安装或长期净收益。
两项生产改动分别属于现有CLI projection和诊断host,19项证据覆盖全6文件;保留persisted receipt及旧调用方,复用SettlementStepKind等既有词汇,没有另造生产状态、scheduler或通用executor。未来有价值的简化是诊断host首guard验证,而非复制Core规则。
完整diff未改变渲染页面、首屏或设置,visual review不适用;正式App/model体验和长期效果不在本次源码证据中。初次标准预检timeout、首guard历史限制及完整release未测轴均保留,未查询CI、执行合并或升级。
English verdict: APPROVE — 551c525; same-Turn ordinary completion now returns actionable settlement context; real File/SQLite and scripted-host evidence passes, while the original premerge timeout and pre-existing first-guard limitation remain disclosed.
…nal call budget Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
… JSON output Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…eback 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.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval).
Exact head: 61416f0; base: 322591f.
动机 / Motivation
执行带 Turn 身份任务、需要完成验证后继续写回记账的 Agent 与维护者。 旧 CLI 普通完成只返回验证回执,调用者丢失下一写回命令及 vision 格式;验证器又把合法普通完成当作提前终结,并在缺一个必需覆盖参数时立即退出。 真实完成后直接得到原身份结算计划,JSON 保留 authoring 格式,Markdown 显示进度与下一命令;写入前的参数拒绝可由同一模型在原调用预算内纠正。 不改变验证、写回、扣额及最终收尾顺序,不放开身份、路由、租约或权限,不扩大十次工具预算、场景、重复和对照,也不声明整版发布已经通过。 完整真实模型组合、整仓回归、正式安装、工作台及公开制品仍须同源码发布资格;此 PR 的局部通过不能替代这些门。 当前完整已安装工作台在“回到最新消息”点击路径失败,继续阻塞整个 release,不能用本 PR 的批准结清。
改动思路 / Approach
生产投影复用既有 TypeScript settlement owner,纯参数分类留在 CLI codec;资格 host 复用既有 OS 隔离 shell,不增加第二个决策 owner 或自动重试器。 交付普通完成后的可用 JSON/Markdown 结算引导及与其一致的诊断 host;完整 release 资格由已有发布 owner 继续承担。 完成 Todo 只证明原交付物通过验证;同一 Turn 仍需要写回与记账。后来的回执说明已提交步骤,并不保证重新携带命令模板,因此继续保留原计划和实际 quota source。输入纠正由同一模型收到真实 CLI 结果后选择,host 不自动重试、不重启场景,不把命令非零退出当作已经回滚。
| 触发 | 旧行为 | 当前行为 |
|---|---|---|
| 普通完成成功 | 只有 validation 回执 | 同身份计划、authoring 格式与下一写回命令 |
| 默认 Markdown 读取 | 不显示普通完成后续 | 显示验证进度及原命令 |
| 纯覆盖参数缺失 | 验证器立即退出 | 保留真实拒绝,同模型在原10次预算内纠正 |
| 身份/路由/顺序错误 | 失败 | 继续立即失败 |
具体改动 / Changes
独立规范为 docs/reference/canonical-terminal-review.md,spec revision 322591fb9ec23da0afcb3251a669af6e2f728988。逐项对照 operate-and-recover、quota-bound-cli-completion、wire-and-migration-boundary:原操作恢复必须可执行;普通验证、持久写回、一次扣额和条件终态仍按顺序;没有改动持久身份、收据、迁移或权限规则。
关键代码讲解
- handle_todo_command:在普通验证通过后返回既有同身份结算计划;原来只有 validation 回执,现在包含下一写回命令及真实扣额来源。
- execute_loopx_cli:保留实际进程退出码和临时 stdout;即使 JSON 含已提交回执,非零退出也不能视为成功,原始输出不写进持久资格回执。
- _execute_cli:消费 JSON 前复核 fixture 范围和进程失败;仅写入前的特定 progress 参数拒绝交回同一模型,其他非零退出继续失败。
- _execute_terminal_workspace:读过原证明后复用 OS 隔离草稿环境;草稿 shell 不能调用 LoopX,不能覆写证明、authority 或 workspace 外文件。
- render_todo_markdown:显示已验证进度与真实下一写回命令;默认 Markdown 用户无需重建身份,渲染器也不另作准入决定。
实际 base/head 对照使用同一 fixture 与 driver,覆盖 File/SQLite × heartbeat/visible-goal 四组。两边原 validator 都只运行一次,写回前扣额均为0;base 四组都缺下一计划/命令,head 四组均保留身份、vision schema、实际扣额来源,并在 Markdown 显示原下一命令。新 native 用例先提交缺 coverage scope 的真实 CLI 调用,比较整个 fixture authority 文件前后字节相同;同模型补齐后8次调用完成原四步回执。另一用例连续7次提交同类错误,在总第10次停止,只有 validation 回执,未写回或扣额。
PASS:183项完整受影响 pytest,0跳过。该批来源为 f1f6f52b09bb0abab85559ed8d56c5355883eb15;当前 head 仅再把文档中的 Turn 拒绝范围限定为 guard 后操作,runtime 与 tests 的全部 Git blobs 相同。当前 head 另有全量静态/文档、真实 CLI 对照和进程失败敏感性验证;Ruff、17模块 mypy、TypeScript typecheck、syntax、双语 diff、十路径公开边界通过;标准 premerge 6项直接和19项选中检查通过,0失败、0 manual holds。全 diff 重新检查,不继承551旧评审的批准;新增 scoped inline/duplicate 参数反例、coverage 指引、纯参数纠正与 Markdown 可用性均包含在本 head。配置 wait_for_ci=false,没有查询、轮询或等待 CI。
对主干的风险 / Risks
最危险的误接受是把可能已经写入的非零命令当成安全重试。直接在 subprocess.run 返回边界注入 rc=1,真实 CLI 先完成写回;将历史198函数代入,同一个独立断言在 ok=false 和 ok=true 两组均抓住错误续扣额,固定 head 两组均立即停止。独立 canonical readback 仍显示真实写回存在而 quota_spend 待执行,没有假装回滚。本次只有 CLI 纯 progress 参数 decoder 在 dispatch 前生成的明确错误 code 可以回到模型;必须同时是 ok=false、appended=false。其他非零结果仍失败,fixture 的身份、route、原 proof 与 authority 保护也不绕过。每次拒绝计入原10次预算,未增加自动恢复轮次。模型不知道参数时仍可能耗尽预算,这个失败如实保留。
普通完成和最终 --no-follow-up 分支分别检查真实 committed receipt 前缀,不能用 status=done、命令返回0或 Todo 数量代替 scope acceptance。draft shell 复用 OS 隔离,不能调用 LoopX;覆盖 proof、workspace 外产物、foreign routes、缺 validation receipt、提前 spend/终态等反例均继续拒绝。Explore off/on 与 selected-runtime 对照也包含在183项中,没有默默启用可选能力。
历史133完整模型场景失败、早期87/551诊断失败、a08两次中一次失败,以及旧评审的输出检查 timeout 都保留;当前检查覆盖同样受影响的不变量,但不声称这些旧运行已经通过。既有首个 guard 的 bridge 会把其 Turn 映射为 fixture Turn;当前协议文字已明确将 Turn 拒绝证据限定为 guard 后的操作;后续 mutation 的严格身份检查不等于补齐该历史首 guard 限制,未据此宣称所有 guard 错误都受测。完整真实模型组合还在独立运行,只有其同源码总结果能用于最终 release gate。
初次文档检查的内容断言通过,但结束采样为 dirty,该次不用于资格。并行 sdist 可复现只生成未跟踪暂存目录且 tracked 文件不变;初次脏路径未被捕获,原因不作进一步断言。同一检查随后以干净前后和相同断言通过,旧记录不改写。
我的整体评价 / Verdict
APPROVE。本次是可用的 CLI 恢复增量,原请求到结果不需要新增用户确认、复制已知身份或另造 vision 格式;仍保留真实失败与独立验收。生产投影复用既有 TypeScript settlement owner,纯参数分类留在 CLI codec;资格 host 复用既有 OS 隔离 shell,不增加第二个决策 owner 或自动重试器。 交付普通完成后的可用 JSON/Markdown 结算引导及与其一致的诊断 host;完整 release 资格由已有发布 owner 继续承担。 没有新增状态机、持久字段或可选策略,不把资格工具改造包装成长程收益。
visual_review 为 not_applicable:完整十路径 diff 为 CLI 文本投影、参数 codec、现有资格 actor、测试和协议文档,没有渲染页面、首屏或布局变化;CLI Markdown 已通过真实完成 payload 的 renderer 检查。 未验证范围:完整真实模型组合、整仓回归、正式安装、工作台及公开制品仍须同源码发布资格;此 PR 的局部通过不能替代这些门。 当前完整已安装工作台在“回到最新消息”点击路径失败,继续阻塞整个 release,不能用本 PR 的批准结清。 真实模型采用、整仓稳定性和正式渠道可用性由后续完整 release 结果承担;不从183项或 PR 合并数量推断。既有大测试模块保留的是实际 CLI/OS/receipt 独立边界覆盖,handler 已拆分且原 maintainability limits 通过,没有增加例外或降低预算。
English verdict: APPROVE — 61416f0. Original-identity completion now returns actionable JSON/Markdown settlement context. Pure pre-dispatch input rejection can be corrected by the same actor within the unchanged budget; actual receipt order, isolation and failure gates remain. Full release/model/artifact qualification is separate and pending.
Turn-bound ordinary completion returned a validation receipt without actionable remaining settlement context. The release actor also confused ordinary validation with terminal closeout and could not author the vision draft advertised by its tool boundary.
Reuse the existing TypeScript settlement owner. Successful bound completion now returns verified progress, the same-identity material plan and next writeback command, preserving the actual quota source; default Markdown exposes the progress and next action too. Existing unbound/manual mutation paths retain their authority.
The explicit qualification host distinguishes ordinary completion from final --no-follow-up, requires actual ordered committed receipt prefixes, checks fixture routes and subsequent Turn bindings, and reuses the existing OS-isolated draft shell. Proof, authority and outside files remain protected; draft shells cannot invoke LoopX. Pure progress-argument rejections before dispatch return to the same model within the original ten-call budget. Actual process status is retained: any other nonzero exit fails, including one that emitted committed-receipt JSON. Raw CLI/model text stays out of durable receipts.
Validation: