Skip to content

fix(cli): round-trip option-like values in lease recovery - #6042

Merged
huangruiteng merged 1 commit into
mainfrom
codex/lease-recovery-option-values
Oct 9, 2026
Merged

huangruiteng merged 1 commit into
mainfrom
codex/lease-recovery-option-values

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

Lease repair arguments introduced by #6038 cannot round-trip a supported execution key such as -execution: argparse treats the returned value as another option. Bind option-like values with --flag=value for identity, destination, routing and repeated scope fields, preserving the existing CLI grammar and typed lease authority. No automatic retry or admission is added.

Validation: all four added counterexamples failed before repair; 66 focused real CLI/help/lease tests pass afterward. Legacy, File and SQLite recovery tests verify renewal, destination key transfer, no mutation on rejection and exact replay. Parser coverage also checks routing and repeated strings. Scoped Ruff, diff hygiene and semantic advisory pass. No new state vocabulary, capability, provider or UI setting is introduced; the bounded refactor is local option serialization.

This is a follow-up because #6038 was merged while its review repair was being prepared. Installed adoption and benchmark effects remain unproven. Maintainer merge follows exact-head review.

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=xhigh.

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

评审对象:#6042,精确 head 259739aa06874d4b07d04e2feaf8865f5eecaf31;基线 4bdcb2eeed64582b99cfc46b213ed755839a69b8。这是 #6038 合入后的独立修复 PR,当前完整两文件差异重新核验,旧 PR 的合并不作为修复证明。

动机

通过命令行恢复任务租约的用户和 Agent。执行标识以连字符开头时,旧版本给出的恢复命令会再次报参数缺失,调用者必须自己修正命令;本次使返回参数可直接交给原命令执行,同时保留原身份和版本。三种实际本地存储路径均已验证:拒绝错误参数时不改租约,返回命令能够续租、转交和释放,重复调用只重放已有结果。范围仅是现有租约 CLI 的参数往返;不新增权限、自动重试、设置项或存储格式,不以源码验证宣称安装采用及长期模型效率已经验收。

改动思路

这属于现有 Python CLI 的参数传输修复,准入、版本比较和租约状态继续由原 TypeScript owner 裁决;无需增加另一套规则或状态。只在既有 recovery helper 统一编码 option-like 值并增加真实入口回归,保留普通参数格式和原拒绝行为。普通值继续使用原来的两 token 格式,仅以连字符开头的值绑定到选项本身。错误处理仍先生成建议,由调用者确认删除项并补齐真正缺失的信息,然后显式执行;参数可解析之后,原权威存储仍独立核验 owner、执行 key、版本及 scope。

我比较了保持现状、只修源 key、禁止此类 key 和新增通用 CLI 框架:前者保留真实恢复循环,单修 key 漏掉目的地与路由,禁止值会破坏已有合法执行身份;现有局部 helper 已足够。未来维护检查已应用于同一原因的编码重复,未引入额外状态或 TypeScript 决策分叉。邻近 Todo claim emitter 已检查,具有不同命令契约,不宣称本 PR 修复全体 CLI 恢复。仓库经验只采用“恢复后继续有用工作”的核验思路,没有继承历史结论或把召回当长期收益。

具体改动

完整差异为两文件 +57/-5:生产代码 +12/-5,真实入口测试新增45行,没有文档、生成文件、配置或 provider 变更。

关键代码讲解

  • _option_args(loopx/cli_commands/task_lease_arguments.py:30)把可能被 argparse 当选项的值编码为 --flag=value;普通值保留原 token 格式。它是词法编码,不判断执行身份是否合法。
  • TaskLeaseArgumentError.recovery(同文件第48行)对 registry/runtime、Goal/Todo、源/目的身份、重复 scope 和 worktree 使用同一 helper。原动作 allowed-fields、Boolean 独立选项、显式零 CAS、缺失与移除列表及权限说明均保持。
  • test_recovery_round_trips_leading_hyphen_execution_keys(tests/control_plane/test_task_lease_argument_recovery.py:107)实际领取合法 key,触发错误,再执行返回 argv;三种存储中续租、目的 key 转交、无写拒绝和重放均读回。另一测试覆盖混合路由与重复字符串;独立评审探针额外走到释放和后续重放,避免仅验证 serializer。

采用修改前规范 docs/reference/canonical-lease-renew.md,固定版本 4bdcb2eeed64582b99cfc46b213ed755839a69b8,逐项映射:

  • Action help and argument recovery:implemented,返回 token 保留原值且可执行;JSON/Markdown 不自动重试,也不授予权限。
  • Operate the current lease:implemented,保留实际 owner/key/version,scope 不扩张;不加 transfer-claim 时不隐式转移 claim。
  • Commit, retry and readback:implemented,完全相同的维护重试不再推进状态,改变 TTL 的陈旧新意图仍拒绝。
  • What inspection proves:implemented,独立 inspect 无写入,不把观察或错误恢复当作执行授权。

对主干的风险

最强反例是“修好源 key,却损坏目的地、重复值或零 CAS”。同一独立真实 CLI 脚本在不可变 base/head 分别执行:base 三种 provider 的返回续租、转交和释放命令都退出2,人工仅改变 token 编码后相同值可成功;head 三种序列直接退出0,版本依次2→3→4→4,当前 inspect 与原样重放相同,scope 保持,陈旧新意图拒绝。没有把合法输入缩成简单字母数字来通过测试,也没有弱化断言。

解析对照覆盖9种词法形态,head 9/9往返;普通恢复 argv 与11个帮助输出在两版本逐字节一致,Markdown shell token 往返保持。解析成功不证明那些合成值全都具有运行权限。完整33个 help/recovery/native 测试和156个租约/claim/诊断回归通过;当前 premerge 的5个直接检查及9个选定 canary 均通过,零失败、跳过和 manual hold。检查包括 CLI 输出预算、模块边界、lease runtime 和本地/refresh/Todo 写入正确性。Scoped Ruff、diff hygiene、先 advisory 再完整语义检查通过;公开差异未见凭据、私有状态或本机路径。

初始一次测试路径拼写错误导致 exit4、没有执行测试,已按真实 native 文件名纠正;随后宿主中断留下未完成日志,已保留,完成后的独立回归和质量链有完整结果。它们不被写成产品失败,也不以挑选某次成功掩盖已完成失败。未执行安装升级、付费模型、Windows 或服务 PostgreSQL:当前未改变其 store/authority,亦不宣称对应平台资格。前端/Lark 没有新交互或设置;本次完整验收边界是已有 CLI 修复旅程。

语义与 CI 对齐

复用既有参数/租约语义,无新共享词表。startswith("-") 是 argparse 词法编码条件,不是状态分类的 substring denylist。默认行为修复在 PR 说明与测试名称披露;不声称 default-off。恢复是建议,缺失/无关参数校验及原 authority 是机器强制义务,二者未混淆。本 Goal 配置 wait_for_ci=false,没有获取、轮询或等待远端 CI;结论由上述本地独立证据支持。

我的整体评价

APPROVE。当前有界用户结果已达到:合法执行身份的恢复命令可以直接继续工作,并保留一次状态变化与原回执。长程效果在这个恢复链上为正向,用户体验也为正向:减少一次无意义的人工修正,不减少真正的信息补齐、版本保护或授权核验。长期模型完成率、吞吐和成本未实测,不能从测试数推断。机制与问题规模相称,无新状态迁移或兼容框架;普通输入和帮助保持现状,架构沿原 owner。源码验证不代表本机已安装采用;runtime 控制面合并由维护者执行。

English verdict: APPROVE - head 259739a. The supported option-like lease identities now execute through returned recovery argv on real Legacy/File/SQLite paths, preserving refusal, scopes, CAS and exact replay. Independent base failures/head passes, 33 focused +156 adjacent tests, help/ordinary-output parity, and 5 direct +9 canary checks support this bounded fix; installed adoption and model utility remain unverified.

@huangruiteng
huangruiteng merged commit 4c4555b into main Oct 9, 2026
22 of 26 checks passed
@huangruiteng
huangruiteng deleted the codex/lease-recovery-option-values branch October 9, 2026 19:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants