Skip to content

fix(todos): bind ordinary code claims to their worktree - #7848

Merged
huangruiteng merged 2 commits into
mainfrom
codex/task-claim-worktree-20261101
Nov 1, 2026
Merged

huangruiteng merged 2 commits into
mainfrom
codex/task-claim-worktree-20261101

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

普通 todo claim 没有把调用方的独立 Git worktree 交给现有 lease owner:同一仓库的两个代码任务都声明 src/** 时,第二个任务会得到 write_scope_conflict,而显式 worktree lease 路径可以接受它。

现在普通 managed claim 会提供候选 Git root,由既有 TypeScript owner 按当前 canonical scopes 校验物理隔离与仓库身份。不同 worktree 可分别领取执行权并读回集成重叠提示;同一 checkout、重定向路径和其它仓库仍被拒绝。原有 active execution、失回执重放及非代码/shared-state 路径保留原 lease 和排他规则。

  • Outcome basis: 可通过公开合成夹具复现的普通入口与现有 worktree lease 契约不一致;base 035f7ac666cef390676c00b6fb0537ede3c9cf44。
  • Intended base: main。这是一项独立代码工作准入修复,沿现有 R2/R5 owner,不改变 C1 controller/executor 交付或其验收顺序。

Author Declaration

  • Written by: model_agent — OpenAI Codex (GPT-6 family).

Implemented against

现有 worktree observation 与 lease acquisition decision 契约;修复普通 claim 对该契约的消费。

Criterion Disposition Owner / validation
独立 worktree 的代码重叠是集成提示,物理 checkout 碰撞仍拒绝 implemented 原 lease observer/decision;真实 File/SQLite CLI 与 sibling/alias fixtures
来源仓库、当前 scopes 与路径隔离必须经过 owner 校验 implemented claim_execution.ts + existing observer;foreign-repository / symlink 拒绝
claim/replay 不得产生替代执行或绕过原 lease implemented 原 receipt/current-proof/lifecycle;跨 provider conformance 与 release/replay 回归

Self-check: 阅读完整 diff、适用仓库规则、现有 owner 与真实 CLI 失败;增加回归后再实现,保留 baseline 反证。

Scope And Continuation

Python 只发现候选位置;TypeScript 复用物理 worktree 观察、canonical scopes、原 CAS/receipt 和 lease 决策。新增 callback 是本地 IO 接缝;write_worktree 复用已有观察语义,不增加 CLI 开关、能力、权限或第二套生命周期。边界相关整理采用现有 Git-root helper;更大模块搬迁不属于这个修复。

每次普通 managed claim 多一次有界 Git-root 查询;完整物理检查仅在新代码执行的 acquisition 发生。没有据此宣称速度或长程净收益。active/replay 保留原执行;非代码、旧 caller 与缺少独立 root 的调用保持保守排他。

本切片完整、可独立审查和回滚;安装版采用、独立评审与长程成本/成果仍分别验收。未合并或安装本提案,无需创建重复后继任务。

Validation

  • Tested revision: 45bbc5e85d2373aff100703243226ab17c3fee4c。运行时代码在 8c3cb3e5f7dc351e1cdafdafad3c4379b4b990d9 完成验证且与最终 head 相同;最后提交只增加一条经过读取/解析验证的自修复索引。
  • Run state: finished
  • Input classes: synthetic, public_fixture
Check kind Result Public-safe evidence / limitation
regression_parity passed 未修改 main 的 File/SQLite 真实普通 claim 均在第二个合法 sibling 失败;候选同一场景成功,保留原负例,并返回集成提示
real_entrypoint passed tests/test_task_lease_worktree.py、canonical claim/replay/transfer、native lease CLI、unpromoted claim、argument recovery,共 53 passed
unit / integration passed npm run test:control-plane:5817 passed, 77 skipped, 0 failed,含 File/SQLite/NoKV 与既有调用方;77 项条件跳过保留为未测
real_backend passed npm run test:postgresql-authority-store:独立临时 PostgreSQL 16.15,384 passed, 0 skipped;涵盖持久化、恢复和 tenant 隔离
static passed TypeScript typecheck、仓库配置 Ruff 全集及 mypy 的 17 个配置文件、diff/bilingual checks;无 RFC 配对修改
static / manual passed 新诊断索引可精确查回;所有改动路径公共边界扫描 clean;原有已安装行为、Windows 实机与真实长期采用未在本轮资格化
static / integration passed 标准 premerge:6 direct checks + 18 selected checks,0 failure/0 warning;当前准确范围的质量回执 valid

首轮 premerge 的六项 direct checks 和十七项 selected checks 全过;聚合门因旧 diff 的质量回执保持失败。已针对当前准确范围重新审查、记录并回读有效质量回执;最终聚合结果以本表为准。没有降低检查或追认旧失败。

Frontend / Visual Evidence

  • UI impact: none。变更为现有 Core CLI claim/lease 路径;Task 的现有 canonical 读回也在真实 CLI 中验证,不新增设置或界面能力。
  • Before / After / first viewport / viewports: N/A,界面布局与渲染未变;不把源码夹具当成已安装 App 证据。
  • Source data: none for UI; validation uses synthetic fixtures.

Type of Change / LoopX Area

  • Bug fix
  • Documentation update
  • Test update
  • Control plane (goals, todos, quota, scheduler, registry, runtime)

Shared-authority RFC fixture impact

N/A for provider promotion, store migration or compatibility projection: none changes. Existing managed-claim conformance was extended and exercised on File/SQLite/NoKV and a real isolated PostgreSQL server.

Boundary Checklist

  • Diff/body exclude private state, credentials, raw logs, internal links and local paths.
  • No benchmark jobs or unrelated work duplicated.
  • Scope remains the reproduced ordinary-claim defect and its durable recovery rule.
  • No paired RFC changed; bilingual checks pass.
  • UI impact is none.
  • Both commits include DCO sign-off.

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 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; reasoning_effort=max; declaration_source=runtime_reported

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

动机 / Motivation

在独立 Git worktree 中领取代码任务的 Agent,会遇到另一任务仅因声明了相同代码目录而占住执行范围。 两个任务分别在同仓库的不同 worktree 修改 src/**:基线普通领取拒绝第二个任务,新 head 验证物理身份后允许领取并保留重叠提示。 真实 CLI 的 File/SQLite 对照、领取后的实际文件写入与再次领取,验证了合法任务能继续工作,原任务的 lease 身份和重放结果保持稳定。

普通领取与显式 lease acquire 原本使用不一致的事实输入,导致已授权的代码工作需要手工绕行。这里的 worktree 是同一 Git 仓库的独立工作目录;允许代码声明范围重叠,仍需证明物理目录不同。本次不授予共享运行目录、其他任务、远端写入或合并权限,不把 worktree 识别当作文件系统隔离,也不宣称长期效率或安装环境已获资格。

改动思路 / Approach

候选路径发现留在 Python 适配器,物理验证与执行权决策继续由现有 TypeScript lease owner 负责,避免第二套权限判断。 本 PR 只打通普通 managed code claim 到既有 worktree 规则,并保留同一执行、重放和失效拒绝;显式 acquire、旧调用者和共享状态互斥仍由原 owner 管理。

普通领取先从当前目录发现候选 Git root,候选本身不赋权;只有新代码执行才进入现有物理路径、仓库和范围验证,然后由原 acquire decision 决定互斥或 advisory。已存在的执行在观察路径前返回,CAS 重试重新读取 canonical head。完整结果先于提交构造,因此原 receipt 也保留重叠提示。代码范围、lease 身份和重放规则均复用既有 owner;没有手工维护的第二份授权状态。

下面是对 45bbc5e85d2373aff100703243226ab17c3fee4c 实际入口对照的文字表,结果来自执行证据,不用示意图代替验证:

同一输入 基线 本 head
独立 worktree、两个代码任务声明相同范围 第二次普通领取拒绝 物理验证后领取,返回重叠提示
未声明代码域的相同范围任务 互斥 完整 lease、拒绝回执和读回保持一致
同一物理目录、范围 symlink、异仓库 拒绝 仍拒绝

具体改动 / Changes

完整审查 7 个文件,+171/-9;生产代码为候选发现和现有 TS owner 的异步连接,其余是两处集成/一致性测试与一行恢复指导。没有新增 CLI 选项、独立 capability、provider 或持久协议。

关键代码讲解

  • claim_canonical_todo_if_promoted:仅 managed claim 发现 linked worktree;canonical checkout 不通过 .git 文件条件,缺失候选仍走原互斥规则。
  • local_authority_runtime:验证可选绝对路径输入,闭包使用 canonical repository 与现有 scope matcher 调用物理 observer,错误直接拒绝。
  • prepareClaimExecution:已有执行先返回;只有新代码任务有仓库与非空范围时才观察 workspace,再复用原 acquire/materialize 逻辑。
  • executeCoordinationTodoClaim:在 CAS 循环中等待准备结果,原子提交 claim/lease/receipt;重放读取原结果,不能被新的 cwd 改绑。

规格依据:docs/reference/canonical-lease-renew.md,不可变修订 035f7ac666cef390676c00b6fb0537ede3c9cf44。Repository-relative scope identity — implemented:范围继续来自 canonical Todo,现有完整 lease head/CAS/TTL/proof 保留。Independent worktree code edits — implemented:真实 CLI 验证独立 worktree 可领取,物理别名、symlink 范围、异仓库、同 Todo/checkout 仍拒绝;身份和 advisory 经重放、释放及 PostgreSQL reload 保留。新恢复指导按这一既有规格评估,没有用本 PR 修改后的文字反向证明实现。

对主干的风险 / Risks

主要风险是把 cwd 候选误当授权,或新观察覆盖已有执行。上面的 TS 物理验证和已有执行优先分支分别封住这两条路径。managed caller 增加一次有界 Git root 查询;没有声称零成本或实测性能改善。非代码路径的完整 File/SQLite 结果对照通过,仅归一化时钟和 provider 生成的 namespace/revision/cursor,未抹掉决策、身份或错误差异。修复指导虽对所有读者可见,仍为条件化恢复建议,没有新增启动义务。

PASS:93 项相关 Python 测试;8 个 TS 模块 1252 pass、1 个条件 PostgreSQL skip;随后独立隔离 PostgreSQL 16.15 的 384 项完整存储检查与 1 项 workspace reload 检查均 pass、0 skip。Typecheck、Ruff、premerge 的 6 项直接检查与 18 项选中检查全部 pass,0 个命令失败。

PASS:同一未改 fixture(SHA-256 7092d608f9f52e0ca52ffa80bedb8345baf30dd76c3f5697d0d82a94aa58384a)在规格基线的两种 provider 均于第二次合法领取得到 write_scope_conflict;本 head 均通过。新增任务在 A 已领取后加入,B 仍可领取、实际写入并独立校验文件、再次领取保持原 execution。另有同一非代码 fixture 的完整关闭路径回执对照通过。

历史尝试保留:首个 pytest 命令误指不存在文件、未收集测试;首轮自建 PG 就绪检查过早得到 57P03。已纠正测试入口和 TCP 就绪判断,重新在独立新容器执行完整所需检查;没有放宽断言或改写失败记录。

语义与 CI 对齐

新增 callback/候选字段留在本地边界,复用已有 workspace/advisory 词汇;diff advisory 在 5 个 source 文件未发现受支持的新闭集候选,这不是自动语义完备证明。代码分支按 typed domain 分类,没有靠 prose/substring 推断权限。wait_for_ci=false,CI 为 UNVERIFIED/unknown(诊断项),没有查询、轮询、等待或猜测原因。

合并门禁仍独立保留:本审查工作区标准 premerge 总退出码为 1,原因是 quality_stale_receipt,没有把通过的检查伪装成总门禁通过。未创建或继承 change-quality receipt;合并还需要当前交付范围 receipt、原生 readiness 和所需授权。本 review 不执行合并或 dismiss。

我的整体评价 / Verdict

APPROVE:该局部目标已实现,实际普通 CLI 和后续文件工作证明不再停在领取环节;长期工作机制与用户路径均 improved,但未据此宣称长期净收益。内部源路径从既有调用者进入统一 typed owner,规模与问题相称;有界整理已通过复用 observer/CAS 完成,无需扩展通用框架。既有仓库经验要求区分入口可用与真实收益,这里保留安装与长期资格边界。

检查的是现有 todo claim、lease inspect/release 和内部协调调用,未改变任何渲染页面或产品首屏。 未验证安装后宿主、原生 Windows 行为或长期并发净收益。 审查绑定精确 head 45bbc5e85d2373aff100703243226ab17c3fee4c;发布前仍须重新核对 head/action。无当前阻塞 finding;独立质量及合并门禁继续由原 owner 处理。

English verdict: APPROVE — ordinary managed code claims now reuse the verified worktree lease owner; local invariants and real-provider continuation pass. Separate merge gates remain.

@huangruiteng
huangruiteng merged commit 141aef1 into main Nov 1, 2026
32 of 38 checks passed
@huangruiteng
huangruiteng deleted the codex/task-claim-worktree-20261101 branch November 1, 2026 21:39
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