Repository navigation
Retire legacy Goal pause metadata through backed-up upgrades - #8431
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…search-case-read-recovery-20261109 Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.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
[P2] 旧确认会解除当前暂停。用 Chat 预览 Resume,随后在同一来源修改注册表,让 typed activation 仍是 active、legacy status 是 paused。旧指纹的 CLI 执行会返回 goal_action_stale,但 Chat 的 idempotent_reapply 只看 typed 状态,换用当前指纹执行。这里新增的写入会清掉源和共享暂停并返回已应用。目标基线在同一 HTTP 序列保留源暂停。请仅在当前预览确认没有源变更时允许重放,并用实际 Chat preview/apply 加一个旧指纹反例。 对应改动
动机 / Motivation
恢复旧暂停的 Goal 后,拥有者应能继续修订验收目标。恢复动作也需满足当前来源的确认约束。 Goal 工作区的恢复操作沿 Chat HTTP preview/apply 到同一生命周期服务,CLI 也使用该服务。
目标主干遇到 activation 已是 active 的旧暂停 Goal 时,把恢复当成无改动。源和共享注册表仍是 paused。 当前提交的有效确认会清除旧暂停。源和共享注册表均回读 active,重复应用返回原回执。
使用隔离的真实 Chat HTTP、源与共享注册表,以及现有 File/SQLite CLI 验证。浏览器渲染和安装态保持待测。
改动思路 / Approach
复用现有源锁、已批准的状态指纹和原重放分支。把预览中的 changed 纳入重放条件,可使 Chat 使用同一套实际写入判据。 修复恢复时源和共享状态的一致性,同时覆盖普通新确认、真正重放和过期确认三条入口。
具体改动 / Changes
评审提交 bc6d970123fb18c71a28e106667a0850253c333b,对照 af9049997fe473334324bb2f166281e9e2324c0b。3 个文件,+83/−8。生产变化集中在生命周期服务,风险由共享的 HTTP 调用路径触发。
规范依据见 docs/architecture/rfcs/goal-workspace-surface-v0.md(af9049997fe473334324bb2f166281e9e2324c0b)。
- resume-legacy-pause(已验证)。拥有者的当前 Resume 恢复可执行状态。 当前提交的有效确认会清除旧暂停。源和共享注册表均回读 active,重复应用返回原回执。
- current-fingerprint-before-effect(待修)。恢复来源有真实改动时必须绑定当前来源的指纹。 旧指纹在 CLI 返回 goal_action_stale。Chat 在同一输入上返回 HTTP 200 和已应用回执,并改写源与共享的 paused。目标基线也把它当重放,但只同步投影,源暂停仍在。
关键代码讲解
- resume_legacy_pause。把 typed active 下仍存在的 legacy pause 纳入实际源写入。 源码
- idempotent_reapply。旧的重放判断只看来源是否一致和 typed 状态是否已到目标。它会使用当前指纹继续 apply。 源码
- test_owner_resume_clears_legacy_pause_before_outcome_refinement。覆盖两个真实后端的 CLI 恢复、refine 及 Stop,但没有走旧 Chat 确认。 源码
对主干的风险 / Risks
91 项定向测试及标准预合并通过。实际 HTTP 的新确认和无写入重放通过。旧确认反例直接检查源与共享内容。
旧指纹在 CLI 返回 goal_action_stale。Chat 在同一输入上返回 HTTP 200 和已应用回执,并改写源与共享的 paused。目标基线也把它当重放,但只同步投影,源暂停仍在。
语义与 CI 对齐
这是既有恢复动作的语义修正。实际完成后的重放仍没有第二次源写入,直接 CLI 的旧指纹拒绝保持。 远端 CI 超出本轮核验范围。
我的整体评价 / Verdict
恢复兼容性修复可保留,需在同一改动中让真实写入继续受当前确认约束。 仅当当前预览明确无需源变更时允许幂等重放。若旧确认之后仍有 legacy pause 要清除,沿已有 stale 路径要求重新预览,保留已经完成恢复的投影修复。
English verdict: REQUEST_CHANGES. Head bc6d970. A stale Chat Resume confirmation can now clear a legacy pause at a changed source fingerprint. The same fingerprint is rejected by the CLI, and the target base leaves source pause state intact. Restrict replay to transitions that require no source write.
cocolord
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | self_reported | model=GPT-6 | provider=OpenAI
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
现有 Goal 恢复与验收调用者会遇到状态不一致:恢复只更新 activation,遗留 status=paused 仍使验收写入被拒绝。明确恢复在现有事务内清除遗留暂停,并读回 source/shared 状态;后续 File/SQLite 验收写入成功。这能让已经明确恢复的工作继续保存验收要求,避免恢复显示成功之后仍反复失败。仅修复既有 Goal 恢复与读回;预算、权限、Todo 租约和其他 Goal 保持各自规则。
安装态与整体模型/团队收益未资格;CI 和精确 head 的合入门仍独立。
改动思路 / Approach
在既有边界修复必要不变量,没有第二个决策owner。继续使用原来的 Goal 生命周期入口、source registry 事务和共享注册表投影;不通过删除验收的暂停或终态检查来消除矛盾。原数据已有 legacy status 与 typed activation,两者都可能被现存调用者读取,明确恢复应在同一 writer 同步它们。读回直接采用已读 source 的 legacy status,避免另加一个可选 expected-status 参数,也覆盖第一次清除暂停之后的重试。没有新增 CLI、协议版本或独立状态存储。仅修复既有 Goal 恢复与读回;预算、权限、Todo 租约和其他 Goal 保持各自规则。
具体改动 / Changes
本次精确 head 为 bc6d970,基线为 71190b6。没有独立书面规范定义这项遗留恢复细则;判断依据是已复现的公共 CLI 缺陷和既有 activation/acceptance 合同。另核对了 docs/reference/configuration-backup.md 的 Stop/lease 边界:停止不是租约排空,本 PR 保持这项区别。
关键代码讲解
set_goal_activation_state 仅在明确恢复且 source legacy status 为 paused 时清除暂停。即使 activation 遗漏或已经 active,也不能把这个恢复当成无变化;提交前仍在原锁内检查当前状态和指纹,状态发生冲突时拒绝旧操作。其他 Goal 的数据、暂停前的拒绝和 achieved/abandoned 验收门没有被这条修复绕过。
_readback 同时验证目标 activation 与已存在的 legacy status。没有 legacy 字段时保留原默认语义;共享副本仍 paused 时不能报告恢复已经 verified。新增反例故意在成功同步后破坏共享 status,证明第一次恢复后的重试也会拒绝错误读回。File/SQLite CLI 用例则验证恢复后能实际 refine outcome,随后 Stop 又拒绝同一操作的重放。
对主干的风险 / Risks
主要风险是误清除未授权暂停、覆盖并发变化,或者只更新 source 却在共享副本上仍被拒绝。修复仍要求原 owner/controller 声明、原 source 身份及指纹检查,并保留真正的 typed Stop;没有把 API 可用性当成恢复权限。不可变 main 上三个同口径隔离 CLI 恢复案例都返回成功但 source/shared 仍 paused,独立 resumed-status oracle 全部失败;当前 head 三种都 active,无关 Goal 保持 paused。91 项检查、四项 direct、Python compile 与十项 selected premerge 通过。早先缺少 TypeScript 依赖的失败保留,依赖恢复后的最终 premerge 已完整通过。远端 CI 是另一个合入门,不能据本地通过宣称已合入或 installed host 已更新。
语义与 CI 对齐
复用既有 GoalActivationState 与 legacy registry vocabulary。唯一有意变化是明确恢复同步遗留暂停,以及已存在 status 的 source/shared 读回一致性;没有通过文本匹配建立新的业务分类或降低验收停止义务。真实 source 与共享投影仍由既有 owner 写入,CI 或 review 的成功不给新的 Goal、租约或合入权限。
我的整体评价 / Verdict
这是独立可复核的恢复修复:在既有边界修复必要不变量,没有第二个决策owner。长程工作合同 preserved,CLI 恢复体验 improved;恢复后不需要新的用户确认才能保存原要求。已检查 loopx/control_plane/goals/activation_service.py 与既有调用方;未改变渲染的产品呈现。变更呈现无新增未验证范围;安装态与更广采用不在本次证明内。安装态与整体模型/团队收益未资格;CI 和精确 head 的合入门仍独立。未发现阻塞这项修复的代码问题,结论为 APPROVE;当前权限、精确 head 的 readiness 和 required validation 仍决定能否合入。
English verdict: APPROVE this scoped legacy-pause recovery fix. Owner authority and Stop remain enforced; merging still requires exact-head readiness and required CI.
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
There was a problem hiding this comment.
Reviewer: model_agent | self_reported | model=GPT-6 | provider=OpenAI
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
明确恢复 Goal 后,拥有者应能继续保存验收要求。原生命周期服务只更新 typed activation,遗留 status=paused 仍使验收写入失败。本 PR 在原恢复事务中同步这项遗留暂停,验证 source/shared 一致,并修复独立评审发现的 Chat 旧确认绕过新暂停问题。后者是实际的授权缺陷:旧预览之后来源已改变,不能用新指纹替旧确认执行真实写入。
判断依据是已复现的 CLI 缺陷,以及已接受的 Goal workspace §5.9。按 V4 核验当前指纹、过期拒绝和重复点击不重复效果。此前把规范判断写成 no_spec 过窄,本次按这三个要求逐项核验。
预算、权限、Todo 租约和其他 Goal 的规则保留。安装态、浏览器视觉与整体模型/团队收益未资格;远端 CI 和精确 head 的合入门仍独立。
改动思路 / Approach
复用既有 Goal 生命周期 writer、source 锁、指纹检查及共享投影。明确 Resume 清除现存 legacy pause;没有遗留 status 的数据保留原默认语义。读回从已经读取的 source 推导 legacy status,无需再增加 expected-status 参数。保留 acceptance 对暂停、终态和 typed Stop 的拒绝,恢复兼容性归恢复 owner 处理。
Chat 的幂等重放现在同时要求当前预览 changed=false。只有无需 source 写入的投影恢复可以采用当前指纹;如果后来出现 legacy pause,旧确认沿原 stale 路径拒绝。它使用已有预览的实际写入判断,没有复制另一套状态分类或新增持久化字段。
具体改动 / Changes
精确 head 为 6b06daa。PR 的测量基线是 merge-base 71190b6,不能把后来移动的目标分支 head 当成已测基线。4 个文件,+142/−8:两个生产 owner 与两个现有验证模块。
关键代码讲解
set_goal_activation_state / _readback 将明确 Resume 的 legacy paused 纳入 changed,在原锁内检查 source 身份与指纹后写入;已有 status 时,共享读回必须与 source 一致。首次恢复和随后重试都覆盖这项一致性,缺省 status 的既有行为保留。
idempotent_reapply 新增 current.changed=false 条件。真实 HTTP 反例 依次执行 preview、修改 source/shared 为 legacy paused、旧 apply、新 preview/apply、receipt replay;旧操作必须 HTTP 409/action_stale 且两份字节不变,新操作为 HTTP 200/active,重放复用原回执且没有第二次改写。
File/SQLite CLI 验证 覆盖 activation omitted/active/stopped 的六种组合,恢复后实际 refine,随后 Stop 拒绝重放。共享 status 被故意改回 paused 的读回反例也保留。
对主干的风险 / Risks
主要风险是把当前 typed 状态相同误判成无需写入,从而解除后来设置的暂停。受控撤去新增 changed 条件时,新真实 HTTP 用例确实失败:旧 apply 返回 200,而 oracle 要求 409;恢复条件后相关完整套件 92 项全部通过。这证明新用例能检测原来 91 项未覆盖的共享调用风险。
不可变基线的三种真实 CLI 恢复都报告成功却仍 paused;候选三种均 source/shared active、读回 verified,无关 Goal 保持 paused。最终标准 premerge 的四项直接检查、Python 编译和十项选择检查通过。早先依赖缺失失败保留。远端 CI 和 merge-readiness 仍是独立合入门;安装态、浏览器视觉与整体模型/团队收益未由本次 HTTP/CLI 资格证明。
语义与 CI 对齐
本次有意修复明确 Resume 的遗留暂停同步,并收紧会产生真实 source 写入的旧确认重放。已有 owner/controller、current fingerprint、锁内冲突、真正 Stop、终态验收和其他 Goal 的边界保留。没有新增默认开关、文本启发式、并行状态 owner 或 UI 呈现。
我的整体评价 / Verdict
三个规范要求已分别证明:新确认恢复并读回、旧确认拒绝且无写入、成功操作重放无重复效果。独立评审中的实际缺陷已经在当前 head 修复,不以旧 commit、绿 CI 或自评结论代替反例验证。范围是完整的既有恢复兼容性与确认边界修复,可回滚,未扩展权限。结论为 APPROVE;阻塞评审的协调、当前 CI、未变 head 的 readiness 和合入授权仍需各自完成。
English verdict: APPROVE. Head 6b06daa restores legacy pause consistently and rejects stale Chat Resume confirmations that would write source state. The real HTTP stale/fresh/replay case, 92 focused tests and standard premerge pass. CI and exact-head merge readiness remain separate.
Verified resolved at 6b06daa: Chat idempotent_reapply now requires current.changed=false before replacing a stale fingerprint. A real Chat HTTP preview→new legacy pause→old apply returns409/action_stale with source/shared bytes unchanged; fresh preview/apply returns200/active and replay reuses the receipt without a second write. Removing the new condition reproduces200 instead of409. All92 focused activation/acceptance tests and standard premerge pass. Original discussion and counterexample are retained; this dismissal does not waive CI or exact-head readiness.
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
* test(workspace): qualify repeated loaded lens latency Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> * test(dashboard): expose page stalls in prospective lens qualification Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> --------- Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
cocolord
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | self_reported | model=GPT-6 | provider=OpenAI
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
明确恢复 Goal 后,拥有者应能继续保存验收要求。原生命周期服务只更新 typed activation,遗留 status=paused 仍使验收写入失败。本 PR 在原恢复事务中同步这项遗留暂停,验证 source/shared 一致,并修复独立评审发现的 Chat 旧确认绕过新暂停问题。后者是实际的授权缺陷:旧预览之后来源已改变,不能用新指纹替旧确认执行真实写入。
判断依据是已复现的 CLI 缺陷,以及已接受的 Goal workspace §5.9。按 V4 核验当前指纹、过期拒绝和重复点击不重复效果。本次按这三个要求逐项核验。
预算、权限、Todo 租约和其他 Goal 的规则保留。安装态、浏览器视觉与整体模型/团队收益未资格;远端 CI 和精确 head 的合入门仍独立。
改动思路 / Approach
复用既有 Goal 生命周期 writer、source 锁、指纹检查及共享投影。明确 Resume 清除现存 legacy pause;没有遗留 status 的数据保留原默认语义。读回从已经读取的 source 推导 legacy status,无需再增加 expected-status 参数。保留 acceptance 对暂停、终态和 typed Stop 的拒绝,恢复兼容性归恢复 owner 处理。
Chat 的幂等重放现在同时要求当前预览 changed=false。只有无需 source 写入的投影恢复可以采用当前指纹;如果后来出现 legacy pause,旧确认沿原 stale 路径拒绝。它使用已有预览的实际写入判断,没有复制另一套状态分类或新增持久化字段。
具体改动 / Changes
精确 head 为 e046357。PR 的测量基线是 merge-base 8f6e88c,不能把后来移动的目标分支 head 当成已测基线。4 个文件,+144/−8:两个生产 owner 与两个现有验证模块。
关键代码讲解
set_goal_activation_state / _readback 将明确 Resume 的 legacy paused 纳入 changed,在原锁内检查 source 身份与指纹后写入;已有 status 时,共享读回必须与 source 一致。首次恢复和随后重试都覆盖这项一致性,缺省 status 的既有行为保留。
idempotent_reapply 新增 current.changed=false 条件。真实 HTTP 反例 依次执行 preview、修改 source/shared 为 legacy paused、旧 apply、新 preview/apply、receipt replay;旧操作必须 HTTP 409/action_stale 且两份字节不变,新操作为 HTTP 200/active,重放复用原回执且没有第二次改写。
File/SQLite CLI 验证 覆盖 activation omitted/active/stopped 的六种组合,恢复后实际 refine,随后 Stop 拒绝重放。共享 status 被故意改回 paused 的读回反例也保留。
对主干的风险 / Risks
主要风险是把当前 typed 状态相同误判成无需写入,从而解除后来设置的暂停。受控撤去新增 changed 条件时,新真实 HTTP 用例确实失败:旧 apply 返回 200,而 oracle 要求 409;恢复条件后相关完整套件 92 项全部通过。这证明新用例能检测原来 91 项未覆盖的共享调用风险。
不可变基线的三种真实 CLI 恢复都报告成功却仍 paused;候选三种均 source/shared active、读回 verified,无关 Goal 保持 paused。最终标准 premerge 的四项直接检查、Python 编译和十项选择检查通过。当前还执行了 CI 相同范围的完整 Ruff 检查及 7 项 CI 前置 invariant,全部通过。旧 head 的 HTTP 测试清理将三个调用写在同一行,Linux CI 在第 688 行报两个 E702,Stage2C aggregate 随之失败;本次拆成顺序相同的三行,整个测试模块 AST 一致。这些旧失败保留。远端 CI 和 merge-readiness 仍是独立合入门;安装态、浏览器视觉与整体模型/团队收益未由本次 HTTP/CLI 资格证明。
语义与 CI 对齐
本次有意修复明确 Resume 的遗留暂停同步,并收紧会产生真实 source 写入的旧确认重放。已有 owner/controller、current fingerprint、锁内冲突、真正 Stop、终态验收和其他 Goal 的边界保留。没有新增默认开关、文本启发式、并行状态 owner 或 UI 呈现。
我的整体评价 / Verdict
三个规范要求已分别证明:新确认恢复并读回、旧确认拒绝且无写入、成功操作重放无重复效果。当前生产源码与先前已验证的 6b06 完全相同,当前 main 集成后重新通过 92 项及匹配的真实 CLI 对照;清理语句只拆行,完整 AST 保持一致。独立评审中的实际缺陷仍已修复,不以旧 commit、绿 CI 或自评结论代替反例验证。范围是完整的既有恢复兼容性与确认边界修复,可回滚,未扩展权限。结论为 APPROVE;阻塞评审的协调、当前 CI、未变 head 的 readiness 和合入授权仍需各自完成。
English verdict: APPROVE. Head e046357 restores legacy pause consistently and rejects stale Chat Resume confirmations that would write source state. The real HTTP stale/fresh/replay case, 92 focused tests, seven CI invariants, full CI-scope lint and standard premerge pass. The prior E702 cleanup failure is fixed without an AST change. CI and exact-head merge readiness remain separate.
…ravity step errors Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…tion Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…ep-error-20261109 fix(native-chat): avoid redundant cancel and progress resets on Antigravity step errors
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
动机 / Motivation
拥有者恢复旧暂停的 Goal 后,需要继续保存验收要求。 基线恢复返回成功,源与共享注册表却仍为 paused,后续保存继续被拒绝;当前提交使有效恢复同步为 active。 独立的 File/SQLite 场景验证恢复后能实际保存验收要求,再次 Stop 后同一操作仍被拒绝。 这修复了反复恢复却仍无法继续工作的失败体验,也保留后来设置的暂停。范围是既有恢复和确认边界;预算、Todo 租约、终态及其他 Goal 的规则保留。
改动思路 / Approach
实际写入判据留在既有生命周期 owner,Chat 复用它判断重放,避免再维护一套恢复状态分类。 本 PR 同时修复遗留暂停同步与旧确认写入边界,不新增配置、协议版本或独立状态 owner。 源注册表保存原始状态,共享注册表承载现有投影;真实写入继续使用原 source transaction、锁顺序和当前指纹检查。已有 legacy status 时,读回也要检查其一致性。把成功条件改成只看 typed activation,或直接删除 acceptance 的暂停检查,都不能修复完整路径。
以下是本次精确 head 的实际对照结果,表格仅概括独立验证:
| 场景 | 基线 | 当前提交 |
|---|---|---|
| owner Resume 后保存验收要求 | 返回成功但 source/shared 仍 paused,保存失败 | 两份均 active,File/SQLite 实际保存成功 |
| 旧 Chat 预览后新增 legacy pause | 同状态重放返回 200,源暂停保留 | 409/action_stale,源与共享字节不变 |
| 新确认与完成后重放 | 恢复遗留暂停的效果缺失 | 新确认恢复;重复请求复用回执,后来暂停仍保留 |
具体改动 / Changes
评审 head e0463578014685c0a0bf3e5ea21e1baa5d894d23,不可变 merge-base 8f6e88cb2a0fb76aba32bce979ba51293c1981f8。完整差异四个文件 +144/−8;生产代码 +21/−8,另外 123 行为现有测试模块中的回归覆盖。已检查原阻断评审到当前 head 的差异:新增实际写入判据及真实 HTTP 反例;本次整审未继承作者自评的 APPROVE。
规范是 docs/architecture/rfcs/goal-workspace-surface-v0.md,固定于 8f6e88cb2a0fb76aba32bce979ba51293c1981f8。V4(已实现):当前指纹、执行后的状态读回、过期确认拒绝及重复点击只有一次效果,分别由真实 CLI/HTTP 证据覆盖。本 PR 不关闭该 RFC 的安装态、浏览器和完整父级里程碑。
关键代码讲解
- set_goal_activation_state 把明确 active 目标下已有的 legacy paused 纳入 changed,在同一锁内重查来源、指纹和状态后同步清除暂停。遗漏 activation、已有 active、已有 stopped 三种情况均覆盖。没有把 achieved/abandoned 当作 paused 清除。
- _readback 从已读取的 source 推导需比较的 legacy status,避免额外 expected-status 参数;已有 status 不一致时,包括再次执行的无源写入路径,都不能返回 verified。缺省 status 保留原有默认语义。
- idempotent_reapply 继续要求同一来源与目标状态,并要求当前预览 changed=false。源里还有新暂停需要清除时,不能替旧确认换用当前指纹;真实完成后的回执重放,以及已提交但回执丢失的无源写入恢复,沿既有路径保留。
对主干的风险 / Risks
PASS:从当前源码加载的两项完整定向模块共 92 项通过。独立脚本用相同输入在基线/当前提交执行:六个 File/SQLite CLI 场景在基线均命中恢复状态失败,当前均能恢复、实际保存并在 Stop 后拒绝重放。两个真实 HTTP 场景覆盖旧确认、新确认、已完成重放、后来的新暂停,以及倒序的 220 个无关 Goal 和随后新增 Goal;当前八个场景全部通过,无关 Goal 保持 paused。两端另一个真实 CLI 边界用例均通过:遗漏 actor、坏指纹、空可选参数、终态及缺失 source 的错误与恢复边界保留。
PASS:受控删除 Chat 新增的 changed 条件,两项真实 HTTP 判据均失败,旧请求返回 200 并清除暂停;恢复原源码后两项重新通过。这复现并验证修复了原评审的具体风险。最终标准 premerge 在源码恢复、工作区干净且精确 head 未变后通过;使用该最终运行作为资格证据。
首轮未固定模块搜索路径,CLI 继承旧安装版,出现 86 通过/6 失败。它不属于当前 head 的合格验证;记录保留,确认实际加载当前源码后重新完成 92 项及独立基线对照,没有删除断言或放宽限制。
语义与 CI 对齐
复用现有 GoalActivationState、legacy registry status 与回执语义,没有新增共享词汇、默认开关或 Agent 权限。owner/controller、来源身份、锁内冲突与真正 Stop 的边界继续有效。恢复暂停和拒绝会产生源写入的过期确认是有意行为修正。按当前评审配置未查询、轮询或等待远端 CI;作者此前报告的 CI 历史不替代本轮本地证据。
我的整体评价 / Verdict
这项恢复修复的目标已在真实入口完成:长期工作可以从恢复继续到持久保存,用户不再遇到假成功;新暂停仍受当前确认保护。实现保留原 owner 和既有兼容字段,机制与问题相称,没有需要当前拆分或新增抽象的部分。检查了 personal-workspace-page.tsx 的既有预览、应用及读回接线;本 PR 未改变渲染呈现。 安装版及浏览器呈现未复跑;真实 Chat HTTP 与两种本地后端的 CLI 路径已验证。
当前精确 head 未发现剩余阻断项,结论为 APPROVE。这个结论不授予合入权限;原生 approval closeout、当前未变 head 的资格及维护者合入授权仍需分别成立。
English verdict: APPROVE. Head e046357. Independent base/head CLI and real HTTP probes verify useful recovery, stale-confirmation refusal and effect-free replay. All 92 source-qualified tests and final standard premerge pass. CI and merge authority remain separate.
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Date.parse accepted impossible calendars and offset-less timestamps as a 1-30 minute retry, so settlement could close that Turn without a spend. Qualification now uses the same timezone-aware resume clock as the writer. Signed-off-by: Duang777 <duangjl007@gmail.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
…operations prop (#8414) Delete 57 workspace i18n message keys (114 lines, en + zh-CN) that no longer have any reference: composer hint/placeholder text replaced by the inline composer placeholder, the retired header description/theme/agent labels, and leftover drawer/tasks/conversation/sidebar/palette-adjacent copy. Keys composed at runtime (palette.*, goal.*, actionReview.*, capabilities.*, runs.*, time.*) were verified as live and kept; the scan covered quoted literals plus template/concatenation construction across src, smoke and i18n-internal localization helpers, and tsc confirms the WorkspaceMessageKey union stays consistent in both dictionaries. Also drop onViewAllOperations, which personal-workspace-page threaded through ManagerHomeBoard into ManagerBrief where it was declared but never read. Validation: tsc --noEmit clean; smoke:usage-progress (asserts i18n source spelling), smoke:home-route, smoke:conversation-input and the personal-workspace contract tests pass; the personal-workspace smoke suite passes its node/SSR steps and the browser lane passes 37/38 scenarios — research-worker-readback fails with route.fetch ECONNRESET reproducibly on pristine origin/main in the same fresh-worktree environment, so it is a pre-existing environment gap, not a regression from this change. No rendered output changes; removed strings were unreachable. Signed-off-by: Lihua <1017343802@qq.com>
* fix(canary): frame tracked change paths on NUL Signed-off-by: ChengLong GU <88359731+gcl-coder@users.noreply.github.com> * fix(canary): preserve Git path bytes through tracked restore Signed-off-by: ChengLong GU <88359731+gcl-coder@users.noreply.github.com> --------- Signed-off-by: ChengLong GU <88359731+gcl-coder@users.noreply.github.com>
* docs(rfc): plan budgeted research on existing stride and yardstick owners Signed-off-by: huangruiteng <huangrt01@163.com> * docs(rfc): align co-discovery costs with the fixed-budget objective Signed-off-by: huangruiteng <huangrt01@163.com> --------- Signed-off-by: huangruiteng <huangrt01@163.com>
* Qualify explicit idle Host handoffs on retained native sessions Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> * Reuse worker-owned streams for idle Host handoffs Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> --------- Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…8372) * refactor(todos): integrate complete canonical source refinements Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> * docs(rfc): record combined report and source caller qualification Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> * refactor(todos): avoid redundant unchanged scalar digests Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> * docs(rfc): reconcile merged loading with remaining source delivery Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> * fix(qualification): reconcile the root-module ratchet after status move Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> * Qualify report callers against the complete Turn source Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> * Record complete CLI qualification across native context integration Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> * docs(kernel): qualify minimum Python CLI composition Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> * Document current-main required Vision refusal qualification Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> * Reuse fresh canonical Todo field digests during quota reconstruction Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> * docs: record small-kernel integration qualification Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> --------- Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
* feat(benchmark): retain per-case Docker image observations Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> * fix(benchmark): keep image inventory readable with cyclic receipt paths Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> * Validate resolved image inventory receipt paths before reading Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> --------- Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…resh-20261109 fix(chat): refresh delivery status in original conversations
* fix(explore): reuse cited measurements in Yardstick comparisons Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> * Keep Yardstick citations within the decision's recorded history Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> * fix(yardstick): bind cited evidence to the original graph prefix Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> * fix(explore): preserve the installed capture presentation contract Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> * perf(explore): batch capture presentation at the existing owner Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> * Keep Yardstick provenance hashing behind the server boundary Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> * Normalize the provenance module file ending Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> --------- Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…ython-20261109t1622 Merge exact reviewed head 11fb6bf. Independent review: #8458 (review) Only test fixture environment isolation changes. All 103 original assertion ASTs remain, including explicit Python priority, installer/venv/stale-record selection and Node/agent CLI discovery. Fresh full module: 43 passed in each ambient mode; adjacent selection/discovery: 10 passed. Full declared Ruff and MyPy 17 files pass. Public scan and bilingual/whitespace checks pass; current-target CQR cqr_62d5022c97b7bc379b25 and standard premerge 5 direct + 2 catalog canaries pass. This scoped fixture repair is qualified. Earlier full-repository failed/incomplete runs, local reviewer bundle-preparation failures and installed-Host/full-cost gaps remain disclosed. No full-repository, installed-Host or release qualification is inferred. Merged under explicit maintainer authorization after exact-head review, required local validation and fresh readiness. GitHub author-owned COMMENTED approval requires admin bypass of GitHub review policy only. CI was not consulted under configured wait_for_ci=false. No unresolved review thread or blocking finding. Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…sal cues in stride explore basis (#8385) * feat(control-plane): surface measurement feedback and yardstick reversal cues in stride explore basis Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> * fix(stride): preserve bounded measurement detail and source paging Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> --------- Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> Signed-off-by: huangruiteng <huangrt01@163.com> Co-authored-by: huangruiteng <huangrt01@163.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> Signed-off-by: huangruiteng <huangrt01@163.com> Co-authored-by: huangruiteng <huangrt01@163.com>
* fix(turn): make complete plan inspection readable in Markdown Signed-off-by: Yuchao Wang <stevenkid404@gmail.com> * fix(turn): keep complete Markdown inspection on the explicit detail path Signed-off-by: Yuchao Wang <stevenkid404@gmail.com> --------- Signed-off-by: Yuchao Wang <stevenkid404@gmail.com>
…0261109' into codex/pr8431-activation-retirement-20261110 Signed-off-by: huangruiteng <huangrt01@163.com>
Signed-off-by: huangruiteng <huangrt01@163.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
动机 / Motivation
持有旧版暂停记录的用户在升级后要求恢复 Goal 并继续修改任务验收时遇到这个问题。相同旧注册表在基线上可以报告 Resume 成功,却继续保留 status: paused,后续执行与显示可能互相矛盾;当前版本先备份原始字节、把旧暂停迁移为明确的停止状态,再由用户显式 Resume 恢复工作。独立原生 CLI 对照已验证升级预检拒绝未迁移数据且零写入、执行升级保留原始备份和停止意图、随后显式 Resume 得到源与全局一致的 active 读回。本次审查覆盖迁移、CLI 与 Chat HTTP 确认边界,不宣称安装后的完整视觉旅程或父级 Goal 工作台全部交付。父级 Goal 工作台 V4 的完整已安装界面旅程仍未验证;跨注册表写入不是一个全局原子事务,后续失败依赖保留备份及同候选重试。
改动思路 / Approach
旧 status 同时承载登记状态和执行暂停,派生读回别名 activation_state 又可能与正式 activation.state 冲突。继续在 Resume 时同步所有历史字段,会把第二个手工权威长期留在普通读取路径。这里选择在现有 authority-archive upgrade 做一次有备份的显式迁移,普通读写遇到旧值时要求先升级,升级本身绝不 Resume。
保留该迁移边界合理:TypeScript 升级解码器决定旧值如何解释,Python 复用既有锁、编解码与写入协议;正常读取不再维护两套暂停权威。当前 PR 的边界是通过现有升级入口无损退休旧暂停元数据,并让现有 Resume 与真实任务验收重新一致;不新增执行授权或第二套 Goal 决策服务。停止是用户意图,不能仅凭另一份 active 投影推断用户已同意恢复。全局投影只通过准确来源路径及同一 Goal lifetime 参与决策;不同生命周期的旧投影不能停止后来重建的同名 Goal。
| 同一份旧暂停注册表 | 基线 | 当前 head |
|---|---|---|
| 升级预检 | 允许,未识别旧暂停升级 | 拒绝激活并指向升级,原文件不变 |
| 执行升级 | 旧暂停与别名仍在,无原字节备份 | 备份验证成功,变为 typed stopped,删除别名 |
| 显式 Resume | 报成功但 status 仍为 paused | typed active,源与全局读回一致 |
具体改动 / Changes
审查精确 head 8431@8e2d7a121fb8c1653b71e6f530c11bb27c745e6d。GitHub 历史元数据的旧 base 为 8f6e88cb2a0fb76aba32bce979ba51293c1981f8,会显示 136 个历史文件;当前目标 main 已包含其中旧历史。已核对当前目标 67dcbde9bebe9d12c03193dc3edc39a0435d7250 与 head 的共同基线 f8a7997bfc0af0041172d44cbc5501edbb5f1651,本次整合增量为 15 个文件、792 行新增、25 行删除,全部逐项审查。没有继承旧版本的 APPROVE,也没有把既有主干历史重新算作当前 UI 交付。
依据变更前 Goal 工作台 RFC §5.9 的当前指纹确认、旧确认拒绝与 owner Resume 边界,以及用户指南 §3.1 的停止保留要求;spec_revision: f8a7997bfc0af0041172d44cbc5501edbb5f1651。§5.9 已实现:旧确认不能清除后来的 Stop,重复执行不扩大授权;V4 的 CLI/HTTP 后端恢复路径已验证,完整已安装 UI 旅程列为父级剩余范围,不在本次声称完成。迁移没有将“已停止”偷偷改成可执行,随后真实验收写入仍受停止状态约束。
关键代码讲解
migrateGoalActivationMetadata:仅接收解释旧状态所需的窄字段;同一路径和 lifetime 连通分量内任何有效停止意图都会保留。生命周期专用的source_session_v1不会借升级获得执行 Resume 能力。upgrade_goal_activation_registries:先锁定并校验发现的来源,再为所有待写文件验证原字节备份,之后才提交;无损合并保留未知元数据和大整数。缺失来源或发现范围变化要求重新发现后重试。ProjectRegistryTransaction.backup_preimage与普通编解码入口:备份拒绝路径重定向并核对原字节,普通读写拒绝退休字段;升级专用事务仍使用既有写入协议,不能把旧格式兼容扩散回所有调用方。- Chat 确认分支:仅在当前状态已无需改变时接纳幂等重放;否则旧 Resume 的指纹不能替代新 Stop 后需要的确认。实际 HTTP 测试验证 409 与零写入,随后新确认才能恢复。
对主干的风险 / Risks
未发现当前 head 的阻断问题。PASS:生命周期、迁移与验收共 111 项测试;编解码、归档、IO census 和 source-session 拒绝共 50 项;标准 premerge 的 6 个直接检查与 17 个选择检查。另用相同的独立脚本在不可变基线和当前 head 调用真实 CLI,观察原文件、备份字节、最终登记状态和正式 activation,避免仅相信 success/readback 布尔值。基线会保留暂停而报告成功;当前 head 的实际保存值与读回一致。File 与 SQLite 的真实验收路径验证升级不改 canonical authority revision,Resume 后 refine 成功,随后 Stop 对新写入和旧操作重放都拒绝。
负例覆盖第二个备份失败时零提交、后续提交失败保留停止意图并可重试、旧投影与重建 Goal、来源改变、未知 writer、v1/v2 保存格式、大整数与不相关字段保留。迁移对旧输入的普通读取是有意收紧,恢复命令在诊断和指南中明确给出;当前格式的正常默认行为保留。安装器在候选激活前调用现有升级,回滚候选先要求格式已可读,未执行本机安装或回滚。
语义与 CI 对齐
这里复用 loopx_goal_activation_v1 和既有 active/stopped 词汇,新增的是升级专用解释入口;没有新增业务状态枚举或根据自然语言猜测暂停的规则。source_session_v1 的生命周期边界继续拒绝执行迁移,scope 没有因为启用某个 Goal 而扩成对其他 Goal 的授权。普通拒绝是必须处理的兼容性错误,不能解释成建议;升级重试与 owner Resume 是两个不同动作。原生词汇、IO 边界和 premerge 检查已通过,未查询远端 CI。
成本在于集中升级时额外备份和顺序写入;这是保护已持久化停止意图所需的边界。备份全部完成不等于跨文件提交原子化,失败后应保留备份并在同候选继续升级,不应自动恢复执行。没有因为增加代码或测试数量就判定完成,也不要求为了减少文件数而保留旧暂停权威。
我的整体评价 / Verdict
APPROVE,针对本次精确 head 与当前目标的完整整合增量。长程效果为 improved:历史暂停先被保留,再由明确 owner 动作恢复,重复升级和重试不会静默恢复工作。用户体验为 improved:原先误报成功的恢复路径现在能得到真实可执行状态与一致读回,既有信息可复用;只有真正缺少的恢复意图需要显式确认。没有渲染界面变化;当前审查范围为 CLI、迁移与既有 Chat HTTP 动作,视觉审查不适用;未验证范围是安装后的完整页面与多主机升级采用。
保留该迁移边界合理:TypeScript 升级解码器决定旧值如何解释,Python 复用既有锁、编解码与写入协议;正常读取不再维护两套暂停权威。当前 PR 的边界是通过现有升级入口无损退休旧暂停元数据,并让现有 Resume 与真实任务验收重新一致;不新增执行授权或第二套 Goal 决策服务。这是可独立回滚和验证的维护增量;父级 Goal 工作台 V4 的完整已安装界面旅程仍未验证;跨注册表写入不是一个全局原子事务,后续失败依赖保留备份及同候选重试。保留的旧格式读取仅用于升级,不是另一个普通决策 owner。合并前仍需独立确认精确 head 的合并资格与维护者授权;本次结论不授权安装或合并。
English verdict: Approve: the backed-up upgrade preserves Stop intent and restores the existing owner Resume path without retaining legacy pause authorities.
The merge-base changed after approval.
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
APPROVE — 未发现当前整合增量的阻断问题。 独立基线/当前提交 CLI 对照验证了旧暂停的无损退休、停止意图保留和随后真实可用的 owner Resume;当前正常 HTTP 授权与重放边界也有成对证据。
动机 / Motivation
保留旧版暂停元数据、升级后仍需要恢复 Goal 并继续工作的用户和运行时维护者。 基线允许升级预检通过,却保留 status=paused 与 active 别名,Resume 后仍是矛盾数据;当前版本先验证原字节备份并迁移为 typed stopped,再由明确的 owner Resume 得到源与全局一致的 active。
独立真实 CLI 已验证预检零写入、备份无损、迁移保留停止意图、显式恢复及后续停止;真实 HTTP 的合法调用、过期确认拒绝和无副作用重放在基线与当前版本均保持有效。 本次交付限于现有升级与生命周期入口;不认证安装后完整界面、多主机旧 writer 并存或实际模型团队收益,也不授予安装或合并权限。 对用户而言,恢复不能只返回成功字样:真正的登记状态和后续任务资格必须一致。保留历史多个字段再同步会让这个成本在每次恢复和升级时重现。父级 Goal 工作台 V4 的完整已安装 UI 旅程仍未验证;跨注册表提交不是一个全局原子事务,失败恢复依赖原字节备份和同候选重试。
改动思路 / Approach
迁移解释归属窄 TypeScript decoder,锁、备份和格式写入复用现有 registry codec;正常读取不再维持第二套暂停权威。 当前 PR 的有用边界是在现有升级入口无损退休旧暂停字段,保留 Stop 意图,并恢复原有 owner Resume 与任务验收链路;不新增配置模式或执行授权。
旧 Stop 是用户意图,不能从另一份 active 展示字段推断同意恢复。仅相同 source route 和 Goal lifetime 的记录参与合并,避免旧投影停止后来重建的同名 Goal。所有需要的原字节备份先完成,再提交各文件;后续失败保留停止和备份,以同候选重试恢复。当前格式保持既有路径,旧格式的解释只在已有升级阶段开放,没有新增普通兼容决策 owner。
具体改动 / Changes
精确 head 8e2d7a121fb8c1653b71e6f530c11bb27c745e6d。GitHub 历史元数据显示136个文件;已核对当前目标 main 的共同基线 f8a7997bfc0af0041172d44cbc5501edbb5f1651,实际整合增量为15个文件、+692/−25,全部净差异逐项检查,没有把已进入主干的旧界面历史算成本次新交付。
规范为 docs/architecture/rfcs/goal-workspace-surface-v0.md,spec_revision f8a7997bfc0af0041172d44cbc5501edbb5f1651,另核对基线用户指南§3.1。§5.9 的既有动作指纹、Stop保留、显式Resume与幂等后端边界通过;V4 的完整已安装页面旅程保留为父级剩余验收,当前没有宣称完成它。新指南是恢复说明,没有拿它替代变更前的要求。
关键代码讲解
migrateGoalActivationMetadata只解释升级所需事实;冲突时保留停止,按准确路径与 lifetime 连接源和投影,不给 lifecycle-only profile 增加 Resume 能力。upgrade_goal_activation_registries持锁读取、校验来源范围,复用 decoder 结果和现有事务;先验证全部备份,再按既有协议提交。未知元数据和大整数留在原 Python payload,不经窄事实传输丢失。backup_preimage保存并核对私有原字节备份;普通 codec 读写拒绝旧暂停字段,升级专用事务继续遵守格式、writer 与补偿边界。- Chat 确认分支只让无需再次改变状态的请求走幂等例外;旧 Resume 不能替代后来 Stop 所需的新确认。既有前端仍调用相同 typed action。
对主干的风险 / Risks
PASS:111项生命周期/迁移/验收测试、76项 codec/归档/IO census/source-session 测试;标准 premerge 的6项 direct 和17项 selected;TypeScript noEmit typecheck。当前提交所有测试临时目录退出后已回收。
同一独立真实 CLI 夹具在基线允许预检、无原字节备份且保留 paused/active alias,甚至 Resume 后仍然矛盾;当前预检拒绝且零写入,迁移备份逐字相等并保留 typed stopped,明确 owner Resume 后源与全局 active 一致,随后 Stop 再次生效。大整数、其他配置和状态文件保留,重复升级不产生新效果。六个真实 File/SQLite 场景还验证 Resume 后可实际 refine 验收,之后 Stop 拒绝旧操作重放。
独立 HTTP 成对夹具在两端都得到正常200、过期409、新确认200、重放200,过期与重放均无文件副作用;它是正常边界的保留证据,没有把这组基线说成旧 HTTP 漏洞。当前提交另有升级打断确认的真实 HTTP 负例通过。备份失败、后续提交失败重试、来源改变、旧投影与新 lifetime、未知 writer 和 lifecycle-only 拒绝也有针对性覆盖。
语义与 CI 对齐
复用现有 loopx_goal_activation_v1、active/stopped 和 writer 词汇;新增升级专用解释入口,没有新的执行状态或角色权限。普通旧数据拒绝是明确的强约束,诊断与指南给出已有升级命令,预检和显式执行仍分开。此行为有意改变且已验证;未获取、轮询或等待远端 CI,未把作者历史 CI 或曾经的评审结论当作本轮通过。
我的整体评价 / Verdict
这是 justified_increment:长程效果 improved,停止意图在升级和失败恢复中持续保留;用户体验 improved,已有意图与权限可复用,恢复读回真实,只有实际缺少的 owner Resume 意图需要表达。已核对实际15文件整合增量和既有个人工作台到 goal.lifecycle 的接线;本次没有渲染页面、布局或控件变化,视觉审查不适用。 未验证安装后的完整页面、多主机旧版本同时写入和真实模型采用;没有本次新增的渲染布局待验。
兼容保留在有证据的持久化格式和升级边界,正常路径不继续维护重复暂停状态。机制体量相称,当前无需要强制拆分或新增抽象的部分。父级 Goal 工作台 V4 的完整已安装 UI 旅程仍未验证;跨注册表提交不是一个全局原子事务,失败恢复依赖原字节备份和同候选重试。 批准只覆盖该精确提交;原生 approval closeout、合并资格及维护者合入授权仍分别成立,当前没有安装或合并。
English verdict: APPROVE. Head 8e2d7a1. The backed-up upgrade preserves Stop intent, retires redundant pause authorities and restores the existing explicit owner Resume path; local real-path validation passes.
The merge-base changed after approval.
A resumed Goal could still be blocked by legacy registry pause metadata that disagreed with
activation.state. The existing backup-first upgrade sweep now retiresstatus=paused/stoppedand storedactivation_statealiases before activating the candidate runtime. Normal registry reads and transactions reject those retired representations, and Resume writes only canonical activation.statusretains registration/archive meaning;activation_stateremains a derived response field for the existing UI. The TS upgrade decoder preserves a stop when historical representations disagree, matches source/projection by exact route and Goal lifetime, and leaves unrelated configuration intact. The existing Python lifecycle service composes the upgrade; the registry transaction owns verified preimage backups, locking, format/protocol validation and compensated writes. There is no new configuration mode or normal-path compatibility reader.The CLI/snapshot update path already invokes
authority-archive upgrade --all-known --execute. This change adds metadata to that existing step, with original-byte private backups before any registry commit, read-only preview/currentness checks, idempotent retry and rejection of changed source routes. A lifecycle-onlysource_session_v1execution pause remains rejected rather than being translated into newly runnable registration; this change does not activate that profile.The original author commits are retained. The existing Chat confirmation guard remains, while its HTTP coverage now checks both an intervening typed Stop and an intervening metadata upgrade. Legacy Resume fixtures now migrate first and then Resume, covering omitted, active and stopped prior activation on both File and SQLite. The duplicate proposal #8460 has been closed; this PR is the single delivery proposal.
Validation:
8e2d7a121fb8c1653b71e6f530c11bb27c745e6d(6 direct checks and 17 selected checks, no failures or holds); remote CI and exact-head review remain separate.Historical CI: old head
e0463578014685c0a0bf3e5ea21e1baa5d894d23exceeded the Release Artifacts job limit while qualifying the snapshot runtime (canceled job). That cancellation remains unqualified; no historical success is inferred. Installed-host and model/team benefit are outside this isolated validation.