test(delegation): align lease qualification with execution phases - #5497
Conversation
Signed-off-by: huangruiteng <huangrt01@163.com>
huangruiteng
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · GPT-6 · OpenAI
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
完整评审 head ef6b1ac8717eae6debee3b13a35d7c24452e1b10,不可变 base 9ac4efa902c50b0d52348513eae807da323bd8cd。结论:REQUEST_CHANGES:夹具修复有证据支持,但本轮必要验证仍有未闭合的失败归因。这里不宣称本 PR 引入了产品缺陷。
动机
运行委派回归测试、核对合并后验收进度的维护者会遇到这个问题。
执行“最终续租回执丢失后失去权威”的测试时,旧夹具的 20 秒准备租约可能先到期,测试在进入目标阶段前就被拒绝;维护者因此得到误报,也会继续把已经合并的工作当成待实现。改动让准备阶段使用正常租约,再在目标阶段主动使其过期或替换,同时更新已有双语验收记录。
可观察结果是测试确实进入续租回执丢失后的拒绝边界,仍不完成 Todo、不重启 Host;文档读者能分清已合并、已记录的有限安装验证和仍待验收的恢复路径。
本 PR 不修改产品租约、权限、默认配置或运行时;不认证完整 GUI、真实模型、Windows、整 Goal 恢复、正式 D2 或默认采用。
完整恢复、停止确认、Windows、持续运行与默认采用仍由既有验收包负责;本次源码验证也不替代文档记录的安装快照验收。
改动思路
复用现有 prepare_lease 的正常租约选项,在准备阶段之后通过真实 CLI 主动撤销目标执行的权威。测试目标是“已经提交续租但回执丢失后,过期或被替换的原执行不能复活”;产品租约和重试规则不变。双语 ledger 原位替换旧清单,固定合并源码,保留初次失败和未验收项。
判据来自改动前的 docs/architecture/rfcs/ledger/shared-goal-authority-state-provider-v0/2026-09-28-retirement-cadence.md,revision 9ac4efa902c50b0d52348513eae807da323bd8cd:
- Delegated execution keeps its original lease:在四个 File/SQLite 过期/替换场景检查原续租回执、Todo 仍未完成、无完成调用、Host 只执行一次。相邻完整续租测试的失败另行列明。
- Close current heads; R3/R5:独立读回 #5413/#5466 的合并提交,并确认两者都已包含在固定的
9ac4efa90;#5283 的新 head 没有继承旧报告的认证。 - Installed recovery candidate; D1/D3, existing whole-Goal promotion task:仍待整条备份恢复、迁移、新写入和回退;本 PR 的记录及本次源码测试没有关闭它。
- Bounded opt-in cohort; D2/D3:此次不邀请试用、不迁移活跃 Goal、不启用发布默认值,既有回退和平台出口保留。
具体改动
三文件 +62/-16 全量检查:
tests/test_delegation_lease_lifetime.py:仅一个既有 helper 调用改为ttl=None,增加两行说明。目标阶段仍真实执行过期或释放后重新获取;没有删拒绝断言或扩大产品超时。- 英文 retirement cadence:更新固定源码和 #5413/#5466/#5283 状态,记录有限安装态验证、首轮 9 通过/5 失败及后续修正,保留所有其他验收出口。
- 中文 retirement cadence:与英文同步上述状态、场景和限制;没有新建平行 roadmap,也没有把 HTTP 资源读回写成完整 GUI 验收。
关键代码
prepare_lease(22–57 行):已有ttl=None分支保留正常获取的租约,测试其他阶段无需新 helper。test_completion_renewal_receipt_cannot_revive_lost_execution(168–172 行):只修准备阶段;提交续租后丢回执的拦截仍调用真实 CLI。- 显式权威丢失及重试断言(198–212 行):过期/替换在目标阶段制造,重试不得成为 accepted、不得调用 Todo 完成。
- canonical Todo 与
host-invocations读回(213–216 行):要求done=false、Host 次数为 1,不能靠回执存在替代结果。
现有覆盖和近期同作者批次已检查:这是修复原回归用例及既有台账,没有重复烟测或同形 PR 堆叠。未来维护性检查已应用在现有 helper seam 和原位清单收敛;没有引入额外抽象。
对主干的风险
产品 runtime、权限、状态词表、默认配置、CLI/API、frontend/Lark 均未改动。三文件完整 diff 证明无需新增前端 companion;这里也没有把源码测试当作安装 GUI 验收。
独立验证保留真实结果:
- 完整
uv run --extra test python -m pytest tests/test_delegation_lease_lifetime.py -q:14 通过、4 失败,exit 1。这次改动直接影响的四个过期/替换拒绝用例全部通过。 - 同一独立插件在准备后固定延迟 22 秒:base 的 File/expiry 用例在目标阶段前成为 rejected,head 则通过真实过期拒绝、无完成和无重启断言。这复现了夹具修复的价值。
- SQLite 停止用例在固定 base 和 head 使用同一命令,都在
await_started得到lease supervision stopped (cancelled):已归因到未改动的既有边界。 - 完整运行中另外三项续租失败是
file-True、sqlite-False、sqlite-True。base 的聚焦重跑为 2 通过/2 失败,head 为 3 通过/1 失败;部分失败发生在current.active=False,其他发生在 Host 启动前取消。逐用例的失败阶段没有全部匹配,因此不能只凭两边都有失败或源码未改就认定全部为基线问题。 - premerge:4 个直接检查通过,19 个选中检查中 18 通过、1 项 task-lease-runtime smoke 按 120 秒预算超时。该 smoke 在源码 base/head 按相同预算重跑分别 99.885 秒、56.443 秒通过;没有提高预算,原 premerge 失败记录仍保留。
- Ruff、compile、diff 检查及三文件公开边界扫描通过;tracked worktree 干净。没有读取或等待 GitHub CI。
文档中的安装快照、App/Chat/Status 与资源读回是原报告;本次独立证据是源码真实 CLI、File/SQLite 和确定性 managed generic Host,未额外认证真实模型、GUI 或持续运行。
我的整体评价
夹具修复足够小、落在现有 owner,目标负例也得到独立反例支持。双语台账区分合并、有限安装和完整恢复的做法合理。
阻塞项 [P1]:闭合剩余续租验证归因。 请对上面三个初次失败身份保留原输入、预算及执行断言,在固定 base/head 得到可比较的失败详情;若是既有问题,提交匹配的独立归因,若是夹具或运行时问题,修复其 owner 后重跑。不要以聚合失败数、放宽超时或删除断言替代归因。当前没有证据证明本 PR 引入产品回归,但必要证据尚不足以给出 APPROVE。修复后由维护者在新 head 再评审并合并。
English verdict: REQUEST_CHANGES - head ef6b1ac. The existing negative-fixture repair is independently supported, but three initial adjacent renewal failures lack complete matching base/head attribution. Real File/SQLite suite: 14 passed, 4 failed; all four changed-scope negatives passed. The initial premerge timeout recovered within the unchanged 120-second budget. No introduced product regression is asserted; keep broader acceptance on hold pending the missing evidence.
|
This pull request has merge conflicts with Choose the remote for the base repository, not an out-of-date fork. git fetch upstream
git rebase upstream/main
# Resolve each conflict, git add the resolved files, then git rebase --continue.
git push --force-with-lease origin HEADFor a same-repository clone whose Keep the DCO |
…stalled-host-acceptance-1003 Signed-off-by: huangruiteng <huangrt01@163.com> # Conflicts: # docs/architecture/rfcs/ledger/shared-goal-authority-state-provider-v0/2026-09-28-retirement-cadence.md # docs/architecture/rfcs/ledger/shared-goal-authority-state-provider-v0/2026-09-28-retirement-cadence.zh-CN.md
Signed-off-by: huangruiteng <huangrt01@163.com>
huangruiteng
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; model=GPT-6; provider=OpenAI; declaration_source=self_reported
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机
维护者验证受管委派任务时,需要区分运行时失权缺陷与测试准备阶段的计时干扰。 此前准备结束后延迟 22 秒,Host 尚未启动就因租约过期被拒绝;现在在受管执行发起处启动同样的 20 秒租约,随后真实跨过期限验证续租、完成与丢响应重试。 修正后的完整 18 项 File/SQLite 回归通过,保留原执行身份、失权拒绝、停止子进程及不重复执行的断言。 本 PR 不修改生产逻辑,不认证正式 D2、Windows、付费模型、发布默认项或旧 Python writer 的退役。
本次审阅整个最终 head 333885ea6207ca5be0b69b6a36124ffdff5bae87,以 main 9c896107618b8e04ae0d02e80b1ac6ae631f286c 为不可变比较基线。原评审要求给运行期间续租和嵌套进程停止的失败完成归因;单凭 base/head 都有失败不能排除回归。这次没有沿用那个未完成的归因,也没有把失败标成无关后绕过验证。先复现,再修夹具,最后完整重跑。这里的租约是执行身份和期限的证明,不是读到一次历史成功回执就可以继续写入。
改动思路
生产路径仍为 Delegations → 实际 CLI → TS 受管进程 → canonical Todo 完成 → 原 Turn 结算。leased_host_process.ts 仍决定当前证明、续期、最后已证明期限和取消;File/SQLite 仍拥有真正的持久事务。测试只把已有短计时器放在它要验证的阶段,不能创造一个新执行或替换原租约。正常 TTL 的准备过程和 20 秒的受管执行观察被明确分开;失败、重试和最终结果继续由真实产品路径处理。
独立依据为 docs/architecture/rfcs/ledger/shared-goal-authority-state-provider-v0/2026-09-28-retirement-cadence.md 在提交 9c896107618b8e04ae0d02e80b1ac6ae631f286c 的“Delegated execution keeps its original lease”节,核对条目(原文无编号)为 original_execution、completion_lifetime、stop_and_retry、qualification_limits:前三项通过原身份续租、最终验收与失权控制验证;最后一项保持验收边界,不把本次测试成功外推为全量准入。新增文档仅记录证据,没有重写合同来适应实现。
具体改动
prepare_lease 保存一份原证明,短 TTL 场景通过局部 at_launch 在 turn run-once 的真实发起处续租一次。它使用当前 CAS version,独立校验 owner、key、epoch,再把真实返回的证明交给现有 supervisor;重试不会重设这个短期限。运行期间的测试仍跨过原短期限,要求有效租约且 version 增长、身份不变、Todo 完成、Host 只执行一次、临时 bootstrap 被移除。撤销/新 epoch 的测试仍要求未接受、后代停止和重试不重启 Host。
test_completion_renewal_receipt_cannot_revive_lost_execution 使用正常准备 TTL;在已经丢失完成前续租响应的目标边界,才真正令旧租约过期或替换。仍要求零次旧 completion、Todo 未完成以及仅一次 Host 执行。六项最终验收测试继续真实跨过 20 秒期限,并分别重放丢失的 renewal/completion 响应,不删预算或改变意图校验。
两份 RFC 记录保留主干的新迁移、创建和恢复结论,补回固定安装源 9ac4efa90 的 14 场景结果与 HTTP 资源读回边界,明确此前 9 通过/5 失败的修正来源。删除旧分支中已过时的待审状态说明。相邻 fixture 收敛到一个 helper,未增加生产抽象、新测试框架或重复 smoke;既有覆盖检索及近 15 个同作者 PR 比较没有发现同一委派矩阵的重复提交。
对主干的风险
最终差异只含 1 个测试文件和 2 份文档,81 行新增、7 行删除;没有生产热点、权限、协议版本、序列化或存储格式变化,因此没有兼容分支可退役。CLI/App/Lark 的设置、交互、输出和安装资源不变;新前端 companion 不适用。历史安装验证只覆盖真实服务与 HTTP,不能替代 GUI 体验测试。长程工作的正确性仍由原执行身份、实际终态、幂等重试与失权拒绝保证,这些断言全部保留。回退只需还原夹具,无数据迁移。
最强反例是普通测试已通过却仍在慢准备时失败:原 head 四项普通运行续租全部通过,但同一 File 丢完成响应用例加 22 秒准备延迟后,在 Host 启动前报告 retired execution;修正后同一延迟通过,真实进入续租、完成和重试。该反例不会证明所有历史失败具有完全相同的细节,因此最终依据还包括全部 18 项真实 File/SQLite 回归通过,无失败/跳过。Host 真正启动以后仍只有原 20 秒压力窗口;运行时过期不会被夹具变成合法。
我的整体评价
APPROVE。该修复关闭本 PR 的夹具与失败验证缺口,不关闭父 roadmap 的全部验收。验证覆盖实际 CLI/TS、确定性 generic Host、真实 File/SQLite、失权负例及嵌套后代停止;完整 18 项通过。Ruff、py_compile、diff hygiene、语义 advisory、公私边界、精确 diff 的 change-quality receipt 和选定 premerge 全部通过。早先失败和未测试边界保留公开区分,没有提高超时、删断言或把问题当成产品成功。Goal 的 wait_for_ci=false,本次审阅不查询、轮询或等待远端 CI。
实际模型调用、Windows 进程树、完整 GUI、整 Goal 持续运行、正式 D2 和发布默认仍不在本次合并结论内。这个批次的前瞻收敛已应用在共享测试 helper;没有借此引入新的 Python 决策 owner。用户已明确授权修复后自合并,合并前仍需精确 head 的 readiness 返回 ready=true。
English verdict: APPROVE - head 333885e; phase-aligned real lease fixtures, 18 File/SQLite cases and delayed-setup counterfactual pass without relaxing authority or budgets; selected premerge and exact-scope qualification pass.
…stalled-host-acceptance-1003 Signed-off-by: huangruiteng <huangrt01@163.com>
huangruiteng
left a comment
There was a problem hiding this comment.
Reviewer: 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)
动机
维护者验证受管委派任务时,需要区分运行时失权缺陷与测试准备阶段的计时干扰。 此前准备结束后延迟 22 秒,Host 尚未启动就因租约过期被拒绝;现在在受管执行发起处启动同样的 20 秒租约,随后真实跨过期限验证续租、完成与丢响应重试。 完整 18 项 File/SQLite 回归已在修正提交通过;同步主干后,未变化的受管执行/租约与夹具实现继续复用该证据,并在最终提交补验两种 provider 的完整委派路径。 本 PR 不修改生产逻辑,不认证正式 D2、Windows、付费模型、发布默认项或旧 Python writer 的退役。
本次审阅整个最终 head 89dade19952760075276012859923a0addac1124,以 main 9c896107618b8e04ae0d02e80b1ac6ae631f286c 为不可变比较基线。原评审要求给运行期间续租和嵌套进程停止的失败完成归因;单凭 base/head 都有失败不能排除回归。这次没有沿用那个未完成的归因,也没有把失败标成无关后绕过验证。先复现,再修夹具,最后完整重跑。这里的租约是执行身份和期限的证明,不是读到一次历史成功回执就可以继续写入。
改动思路
生产路径仍为 Delegations → 实际 CLI → TS 受管进程 → canonical Todo 完成 → 原 Turn 结算。leased_host_process.ts 仍决定当前证明、续期、最后已证明期限和取消;File/SQLite 仍拥有真正的持久事务。测试只把已有短计时器放在它要验证的阶段,不能创造一个新执行或替换原租约。正常 TTL 的准备过程和 20 秒的受管执行观察被明确分开;失败、重试和最终结果继续由真实产品路径处理。
独立依据为 docs/architecture/rfcs/ledger/shared-goal-authority-state-provider-v0/2026-09-28-retirement-cadence.md 在提交 9c896107618b8e04ae0d02e80b1ac6ae631f286c 的“Delegated execution keeps its original lease”节,核对条目(原文无编号)为 original_execution、completion_lifetime、stop_and_retry、qualification_limits:前三项通过原身份续租、最终验收与失权控制验证;最后一项保持验收边界,不把本次测试成功外推为全量准入。新增文档仅记录证据,没有重写合同来适应实现。
具体改动
prepare_lease 保存一份原证明,短 TTL 场景通过局部 at_launch 在 turn run-once 的真实发起处续租一次。它使用当前 CAS version,独立校验 owner、key、epoch,再把真实返回的证明交给现有 supervisor;重试不会重设这个短期限。运行期间的测试仍跨过原短期限,要求有效租约且 version 增长、身份不变、Todo 完成、Host 只执行一次、临时 bootstrap 被移除。撤销/新 epoch 的测试仍要求未接受、后代停止和重试不重启 Host。
test_completion_renewal_receipt_cannot_revive_lost_execution 使用正常准备 TTL;在已经丢失完成前续租响应的目标边界,才真正令旧租约过期或替换。仍要求零次旧 completion、Todo 未完成以及仅一次 Host 执行。六项最终验收测试继续真实跨过 20 秒期限,并分别重放丢失的 renewal/completion 响应,不删预算或改变意图校验。
两份 RFC 记录保留主干的新迁移、创建和恢复结论,补回固定安装源 9ac4efa90 的 14 场景结果与 HTTP 资源读回边界,明确此前 9 通过/5 失败的修正来源。删除旧分支中已过时的待审状态说明。相邻 fixture 收敛到一个 helper,未增加生产抽象、新测试框架或重复 smoke;既有覆盖检索及近 15 个同作者 PR 比较没有发现同一委派矩阵的重复提交。
对主干的风险
最终差异只含 1 个测试文件和 2 份文档,81 行新增、7 行删除;没有生产热点、权限、协议版本、序列化或存储格式变化,因此没有兼容分支可退役。CLI/App/Lark 的设置、交互、输出和安装资源不变;新前端 companion 不适用。历史安装验证只覆盖真实服务与 HTTP,不能替代 GUI 体验测试。长程工作的正确性仍由原执行身份、实际终态、幂等重试与失权拒绝保证,这些断言全部保留。回退只需还原夹具,无数据迁移。
最强反例是普通测试已通过却仍在慢准备时失败:原 head 四项普通运行续租全部通过,但同一 File 丢完成响应用例加 22 秒准备延迟后,在 Host 启动前报告 retired execution;修正后同一延迟通过,真实进入续租、完成和重试。该反例不会证明所有历史失败具有完全相同的细节,因此最终依据还包括修正提交完整 18 项真实 File/SQLite 回归通过,无失败/跳过;合入新主干后,夹具、Delegations 和 TS supervisor 均未变化。新增历史读取使用独立的 completed_history scope,默认 active 路径保留。最终提交又补跑 File/SQLite 各一条完整续租、完成与结算路径。Host 真正启动以后仍只有原 20 秒压力窗口;运行时过期不会被夹具变成合法。
我的整体评价
APPROVE。该修复关闭本 PR 的夹具与失败验证缺口,不关闭父 roadmap 的全部验收。验证覆盖实际 CLI/TS、确定性 generic Host、真实 File/SQLite、失权负例及嵌套后代停止;完整 18 项在 333885ea6207ca5be0b69b6a36124ffdff5bae87 通过;最终提交两种 provider 的完整路径补验均通过(2/2,70.99 秒)。第一次补验因磁盘写满中断,独立核对容量并清理可重新下载缓存后,以相同两条用例通过;未将环境中断计为通过。Ruff、py_compile、diff hygiene、语义 advisory、公私边界、精确 diff 的 change-quality receipt(cqr_178642d872a793f12d92)和选定 premerge 全部通过:19 项选定检查加 4 项直接检查,零失败和人工 hold,原 120 秒单项预算未变。早先失败和未测试边界保留公开区分,没有提高超时、删断言或把问题当成产品成功。Goal 的 wait_for_ci=false,本次审阅不查询、轮询或等待远端 CI。
实际模型调用、Windows 进程树、完整 GUI、整 Goal 持续运行、正式 D2 和发布默认仍不在本次合并结论内。这个批次的前瞻收敛已应用在共享测试 helper;没有借此引入新的 Python 决策 owner。用户明确授权修复后自合并。GitHub 回读显示最终 head 已于 2026-10-03 07:26:19 UTC 合入,merge commit 为 60f0e64e45dd735be9d8ba5d1f3948540991c9f2。333885 修正提交的自审、完整 18 项回归和选定 premerge 在合入前完成;最终 head 的两条补验、质量回执及本记录在合入后补齐。此次属于精确 head 的合入后审计,不宣称最终 head 的自审或 readiness 在合并之前完成。
English verdict: APPROVE - head 89dade1; phase-aligned real lease fixtures, 18 File/SQLite cases and delayed-setup counterfactual pass at the repaired source, with two provider journeys repeated after main integration without relaxing authority or budgets; selected premerge and exact-scope qualification pass.
Goal And Delivered Outcome
Repair the existing delegated-Host qualification in the shared-authority retirement program (R5, D1–D3). A 20-second lease began during fixture preparation and could expire before the intended renewal or final-acceptance boundary. Preserve the production lease rules and test outcomes, while starting the short timer at managed execution dispatch.
The final diff changes only the existing lifetime test and bilingual RFC ledger. Main's newer planning/validation entries survive conflict resolution; fixed-source installed evidence remains explicitly bounded.
Author Declaration
docs/architecture/rfcs/ledger/shared-goal-authority-state-provider-v0/2026-09-28-retirement-cadence.md, immutable revision9c896107618b8e04ae0d02e80b1ac6ae631f286c, “Delegated execution keeps its original lease”.Scope And Continuation
Complete within this scope: terminal authority-loss preparation uses normal acquisition TTL, and the shared short-lifetime fixture performs one real CAS renewal at dispatch. It verifies original owner/key/epoch before publishing the proof. All original runtime/validation budgets and assertions remain.
No production, API, receipt, storage format or UI change. Existing whole-Goal recovery, sustained D2, Windows, stop-acknowledgement and default-adoption tasks retain their own acceptance. No new successor is needed for this repair.
Validation
333885ea6207ca5be0b69b6a36124ffdff5bae87, baseline9c896107618b8e04ae0d02e80b1ac6ae631f286c.89dade19952760075276012859923a0addac1124; main baseline:3870aa12d1719b84b50118dc50d9148d68c0e018. The fixture, Delegations adapter and TS Host supervisor are unchanged by integration; default active reads remain active and the new completed-history scope is opt-in. Both provider execution journeys were repeated on this final head.python -m pytest tests/test_delegation_lease_lifetime.py -q: 18 passed in 497.70s; real File/SQLite, actual CLI/TS, renewal, lost replies, expiry/replacement, once-only completion and nested-process stop.cqr_178642d872a793f12d92, three files; initial result references were corrected to the packet's admitted evidence paths before recording the passing receipt.Original review failures remain historical observations, not accepted product successes. The deterministic reproducer and complete final suite replace the incomplete earlier attribution. No active Goal was corrupted or migrated. Historical installed CLI/App/Chat-Status evidence remains pinned to
9ac4efa90: 14 bounded scenarios and process/HTTP asset readback, not GUI/live-model/Windows/D2 certification. Goal review policy disables remote CI consultation; this qualification uses local repository-native evidence.GitHub readback shows this final head was merged at 2026-10-03 07:26:19 UTC as
60f0e64e45dd735be9d8ba5d1f3948540991c9f2while qualification was running. Repair-head self-review, the full 18-case suite and selected premerge finished before merge. Final-head provider reruns, exact-scope receipt, premerge and the final published review were completed after merge; they are post-merge audit evidence, not a claim of final-head pre-merge readiness.Frontend / Visual Evidence
UI impact: none. Verified production/packaged-asset diff is empty. No App/Lark/CLI interaction changes or visual companion work.
Boundary Checklist