Repository navigation
fix(quota): align Turn settlement outcome guidance - #7211
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) — APPROVE at 3dc5dc5204a73129195731c7a895ca17b0c7ff7d. Required quality/merge qualification remains held.
动机
Agent 按当前 Turn 的结算计划填写结果时,需要拿到实际写入器能够处理的选项。
旧提示把 surface_only 列为可结算选项,但同一轮写入会拒绝它;当前提案只列原有材料成果选项,并明确准备工作不能改报进展。
这里的 Turn 是一次带有原始身份的受管执行轮次,结算是记录其验证成果与适用扣额。
File 和 SQLite 的相同实验中,准备结果都被拒绝且没有写回或扣额;当前提示不再推荐该无效选项,随后真实进展可用原 Turn 结算并继续原 Todo。
不修改结算准入、权威状态、配额、权限或模型执行,不把准备工作改报进展;安装采用和长程收益不在本提案资格内。
安装态实际采用、匹配模型实验及完整成本净收益仍未验证;已有摘要匹配必需检查的失败继续阻塞质量与合并资格。
改动思路
复用已有材料成果枚举即可纠正提示;写入、身份与配额决定仍由原 owner 执行,没必要为提示增加另一套资格规则或新状态。
当前 PR 仅对齐原有 Turn 提示并保护拒绝后继续路径;不修改 writer、准入、权限、配额、安装或模型执行。
没有把拒绝改为放行,也没有另加提示专用的资格判断。较小的正确修复是使用现成的材料成果枚举,再把“不能把准备改报进展”和“只能在既有限制内继续”说清楚。只换枚举虽能改正列表,却容易让 Agent 误解为必须挑一个进展标签;明确保留真实分类与停止条件有独立价值。
对原始基线和当前提交,执行了普通 Todo、在途接续、自主重规划三种实际工厂调用。完整返回计划仅有已声明的列表和告诫文字差异;身份、生成命令、步骤顺序、完成条件、Vision 和回执要求逐字段保持。每种指令增加 158 个字符,没有用压缩删除有用义务,也没有改预算来取得通过。
具体改动
完整三文件差异为 +63/-4,其中生产部分只有原投影中的导入、选项列表与两项告诫。规范为 docs/quota-allocation.md,固定在改动前 0c0d3dd31e865782f653ea3195ef36d8fac7b395:surface_only — implemented,准备/表面成果不能改报有效进展;outcome_progress — implemented,真实验证进展可继续原工作项;outcome_gap — implemented,仍需真实阻塞、原身份和有效证据,不允许为结算伪造 blocker。
关键代码讲解
- turnScopedCliSettlementPlan:第 27 行复用
MATERIAL_DELIVERY_OUTCOMES;第 28—29 行禁止准备改标并保留执行限制。原普通、在途和 replan 分支均未改写,特别是原来的完成与 Vision 条件仍在。 - isTurnScopedSettlementOutcome:这是未改变的资格依据,进展成果和带原绑定的 typed blocker 有不同条件;列表本身不证明事实或权限。新增回归用这个原 owner 作独立判定,保留一般
surface_only解码兼容。 - build_turn_scoped_cli_settlement_plan:Python 仍只把原身份和 CLI 命令交给既有 TypeScript owner,没有新 RPC 或决定副本。真实
quota should-run入口已验证接到当前提示。 - 既有接续回归:扩展为 File、SQLite 两个真实隔离 authority,并先验证准备拒绝无副作用,再沿原 Turn 写回、扣额与接续。没有用模拟的成功回执替代实际写入器。
对主干的风险
最强反例是 Agent 见到列表变窄后伪造进展或阻塞。新文字明确禁止这种做法;同一独立脚本在不可变基线与当前提交、File 和 SQLite 上实际运行:旧版两项实验均推荐了写入器拒绝的选项,当前提示均无此项;两版真实拒绝的完整错误相同,拒绝后写回、扣额均为零。随后真实进展用原身份产生一次写回、一次扣额,同轮重放跳过,下一轮仍选中原开放 Todo,完整 canonical Todo 没有被改写。三种工厂输出除明确的文字变更外完整相等。这证明有限机制,不证明模型一定遵循提示。
定向八项 TypeScript、十五项 CLI/诊断测试、完整类型检查,以及五项直接和三项选定 premerge 源检查通过。三份候选文件的项目范围公共扫描通过。附加扫描的初始调用选择了无关范围,过滤参数也曾被拒绝;两次辅助失败记录保留。按 CLI 实际支持的项目范围重新扫描后,三个候选文件通过,没有据此声称更广范围的健康检查通过。
必需的摘要匹配 owner 检查仍为十六项通过、一项失败:trajectory_input_usage.ts:24 与 steward_managed_mode.ts:150 仍有重复匹配器。在原基线、已获取的实际 target c37ab4df9b00f86cd502f0d355b4d1a52bc97760 和当前提交独立运行同一完整模块,失败的实际值、期望值、错误类型、断言位置完全相同,仅归一化工作树 URL;测试和两处原因代码 blob 均未改。本次改动的结算不变量已有独立通过证据,所以按现行评审规则,这项既有失败不构成当前代码改动的阻断发现;但没有豁免必需检查,也没有把它改成可选。自己的准确范围质量回执 cqr_1d74f3e17a96cbb5c1ea 明确保留 FAIL,质量及合并资格继续被阻塞。作者全套 5416 过、1 败、75 跳的记录保留;本轮没有宣称重跑了整个套件。
语义与 CI 对齐
复用现有词汇与 owner,未增加新的状态枚举或公共协议。逐条核对了 Agent、先后顺序、证据来源、作用域、继续与停止条件;只对有实际反例的选项作有意变更。outcome_gap 的原有条件仍然是硬校验,提示不授予额外权限。没有查询、轮询或等待远端 CI。
我的整体评价
这是 justified_increment:现有 CLI 的错误引导得到完整、有反例的纠正,真实拒绝后的有效工作仍可恢复。long_horizon 保持原接续与一次结算语义;user_experience 改善 Agent 的结算选择,没有增加用户确认或手动操作。复用已有材料成果枚举即可纠正提示;写入、身份与配额决定仍由原 owner 执行,没必要为提示增加另一套资格规则或新状态。
已检查 settlement_plan.ts、Python CLI 调用链及现有 Dashboard/Chat/MCP 分工;这只修改 Agent 收到的 CLI 指令文本,没有新增产品控件或渲染展示变化。 没有重跑完整 TypeScript 套件、安装态、模型行为或并发压力实验;作者的全套失败保留,本轮独立重跑其失败模块并核对完整断言。
没有需要本 PR 扩大的重构或当前改动阻断项。保留一般结果解码与历史回执是实际兼容需要,不应为缩减代码删去;当前更小的 owner 复用已经完成。安装态实际采用、匹配模型实验及完整成本净收益仍未验证;已有摘要匹配必需检查的失败继续阻塞质量与合并资格。 批准是代码评审结论,不是绿色质量回执、原始 GitHub 批准状态或合并授权。
English verdict: APPROVE at 3dc5dc5204a73129195731c7a895ca17b0c7ff7d. The existing projection now offers outcomes its writer can qualify while explicitly preserving honest preparation and execution limits. Independent base/head File/SQLite experiments verify refusal with no effects, original-identity progress, one debit, replay and later continuation; all three full plans retain their other obligations. The unrelated required digest-owner check reproduces identical failures at base/target/head and remains failed: exact-scope CQR FAIL and merge qualification stay held. The full suite and installed/model adoption were not rerun or claimed.
Turn settlement plans suggest
surface_only, but the writer rejects that outcome before appending a Turn writeback. Reuse the existing material-outcome owner for the advertised choices and explicitly preserve honest preparation-only reporting and existing execution limits. Typed blocked gaps still require their original evidence and binding.The regression coverage compares ordinary, in-flight and autonomous-replan guidance with the writer's qualification rule. The real CLI flow runs against isolated File and SQLite authorities: rejected
surface_onlycreates neither a writeback nor a spend, then actual progress can settle the same Turn and preserve continuation. Standalonesurface_onlydecoding remains supported.Validation on
3dc5dc5204a73129195731c7a895ca17b0c7ff7d:trajectory_input_usage.ts:24andsteward_managed_mode.ts:150. The identical assertion payload reproduces on immutable base0c0d3dd31e865782f653ea3195ef36d8fac7b395; the test and both reported sources are byte-identical. This failure is retained, not waived.Scope: existing agent-facing CLI guidance and durable regressions. The change removes a known invalid authoring choice; installed adoption and long-horizon cost benefit remain unqualified. Merge readiness and runtime installation require their separate review and authority.