Repository navigation
feat(explore): inherit machine exploration mode across Goals - #7392
huangruiteng wants to merge 18 commits into
Conversation
The delegation context reader called load_project_registry directly. That loader accepts source-session (v2) registries, which generic reads refuse, and the architecture guard allows only allowlisted modules to call it. Read through load_registry instead, which refuses the lifecycle-only profile. Keep the unavailable mapping for registry paths that Path.exists() would hide (ENOTDIR, ELOOP). The stat() call before load_registry makes those raise as before. Registries that carry profile_id source_session_v1 are now reported as unavailable, in any format. Other registries decode as before. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> Signed-off-by: Jen <jen@JendeMacBook-Pro.local>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: huangruiteng <huangrt01@163.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>
…minator-reading-20261026
…ntributors-20261026
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…al title #7376 replaced the badge's tooltip with a ContextHelp whose accessible name is "<source> · <read only>". When the Goal title already names the source the visible label is deliberately omitted, so that name and the disclosure heading repeat a title already on screen and announced to assistive technology. The shipped SSR contract then fails in the required chat-bundle-browser step, which keeps merge-gate red for every PR whose classification runs core tests. Name the help by its purpose when the source is already the Goal title, keep the source in the on-demand disclosure, and scope the smoke assertion to the badge's persistent label and visible text instead of a raw HTML slice that now swallows the hidden panel. Fixes #7378 Signed-off-by: JasonBuildAI <jasonbuildai@users.noreply.github.com>
…acement-20261026
…g-20261026 fix(chat): retain workspace readers across steward navigation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…ext-refusing-registry-loader
songoow
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; model=GPT-6 Astra Pro; provider=OpenAI; declaration_source=self_reported
详细中文评审
审查提交:e5a72a00c262857f0865f92daa120bf354d3d36c。实际合并基线:30ffb06b9ded2d08391ed8c58f05cc34db7d39bd。本评审基于完整 diff、相关调用链和独立执行的合成测试;发表前重新确认远端 head。
动机
本 PR 解决已有和新建 Goal 只能逐个配置 Explore 模式的问题:设备偏好提供 off/evidence/planning,Goal 显式模式及旧 enabled 字段保留优先级,清除覆盖后恢复实时继承。这个目标成立,读取时投影也避免了批量重写 Goal 注册表。
评审依据为本提交的 desktop-execution-frontends-v0 配置归属契约、Explore Machine default 契约,以及既有 canonical Todo 研究证据校验和 runtime source 路由契约。没有把配置启用或合成测试等同于真实模型采纳、任务收益或交付完成。
改动思路
保留当前总体设计:在已有 TypeScript Explore configuration owner 中解析有效模式,Python 负责机器配置 IO 与投影,机器命名空间沿用既有 preview/apply/revision 事务。机器只拥有 mode;profile、composition scope、spawn、lease、quota 和外部发布授权继续由各自边界管理。默认仍为 off,legacy false 保留显式覆盖语义。
需要补齐同一语义在生产决策入口和前端消费者中的使用。共享解析器只有被 canonical 完成校验、表单和全部相关调用者采用,才真正建立统一规则。本次问题主要是这些集成遗漏,当前修复边界应保持在 Explore 配置及其直接消费者内。
具体改动
| 变更面 | 已检查的主要实现与判断 |
|---|---|
| 有效配置与机器注册 | explore_configuration.ts、machine_defaults.py、effect_runtime_handlers.ts、machine configuration builtins;优先级、复制隔离及配置来源处理合理 |
| 设置与写入 | configuration catalog/UI、Goal API、configure-goal 及 CLI clear 参数;机器编辑器只暴露 mode,Goal 清除覆盖保留其他 spawn 设置,但稀疏覆盖值没有被既有前端正确消费 |
| 运行时消费者 | history/quota、turn context、branch planners、research evidence/frontier、composition frontier、material-refresh activation;已迁移的消费者能识别继承模式,但原生完成 guard 和一个 Todo 调用者遗漏 |
| 文档与验证 | 双语 RFC、双语 Explore 文档、三张设置截图、新增 Python/TS/API 用例;截图覆盖普通继承路径,未覆盖 profile-only 表单状态,既有作用域测试尚未同步 |
对主干的风险
F1 — [P1] 继承机器 planning 时,原生 canonical Todo 完成跳过研究结果校验
本次在 research_frontier.py:219 让 legacy completion 使用有效配置,但 ResearchTerminalEvidenceHost.qualify 仍只从原始 registry 读取 spawn_policy.explore_harness。Goal 只保留 composition_mode=explicit_only 和 composition_scope_id、mode 继承机器 planning 时,raw harness 没有 enabled;native guard 返回 required:false, allowed:true, evidence:null。
我在一次性真实 SQLite authority 上复用了 tests/control_plane/test_research_execution_authority.py::test_native_completion_refuses_missing_result_and_accepts_exact_observation 的研究任务和数据,仅改变 mode 的来源,执行实际完成函数并读取 canonical Todo:
| 同一缺少实验结果的任务 | Goal 显式 planning | 机器继承 planning |
|---|---|---|
| CLI frontier | scheduled=1, observed=0 | scheduled=1, observed=0 |
| 完成结果 | 拒绝:要求当前任务对应的 typed experiment observation | ok:true, completed:true, provider_status:applied |
| completion evidence | 必须具备;本次拒绝 | null |
| canonical Todo 状态 | open |
done |
因此这是实际持久状态正确性回归,不能用规划/展示端已统一配置来证明完成路径正确。最小修复是在 native terminal evidence owner 的 disabled early-return 前,按同一 source/runtime 读取并解析有效模式,复用现有 typed owner,保留 source revision 和图锁约束。补充显式/继承两种模式下缺少结果均拒绝、有效结果允许以及 replay 保留证据的真实后端用例。
F2 — [P2] profile-only Goal 覆盖使前端把继承 planning 显示并保存为 off
configuration_catalog.py:899 将 Explore 加入稀疏覆盖投影。有效的 Goal profile-only 配置现在返回 current={profile:"adaptive-resilient"},而 effective mode 为 planning/machine_default。既有 goal-capability-settings.tsx:100–111 优先取非空 current,再用产品默认值填补缺失字段,因而生成 mode:"off" 的表单。
通过实际 configure-goal/project_goal_configuration、生产 TS projectEditableCapabilityConfiguration 和写回处理函数复现:设备 planning + Goal 只有 profile → effective planning/machine_default;只改 profile 后保存 → off/goal_override。显式 mode-only 与 mode+profile 两个对照则保持正确。
修复应让表单显示真实 effective mode,并明确区分显示值与显式 mode 覆盖意图。仅把 effective 填入完整草稿,还可能在保存其他字段时将实时继承固定为当前值;可以复用相邻 cadence 编辑器区分 display/write intent 的方式。需要 profile-only、composition-only 和显式模式的往返测试。本复现执行了真实配置处理函数和生产 TS 字段投影器,没有声称运行浏览器交互。
F3 — [P2] Todo settlement plan 遗漏 runtime_root,混用其他运行目录的机器配置
project_settlement_attachment() 新增 runtime_root,quota 已传递,但 _todo_settlement_plan 仍只传 registry_path。新 _policy() 因而回退到 registry 声明的根目录,忽略调用者已经选定的显式 runtime root。
使用真实 Todo plan producer 和两个临时运行目录复现:registry root=off、selected root=planning 时错误省略 Explore attachment;两者反转时错误添加 attachment。计划中的 writeback 命令却正确指向 selected root,形成配置与命令目标不一致。这违反了既有 runtime route 的 explicit override 约定,也破坏本 PR 声明的隔离 runtime preference。
最小修复:在 _todo_settlement_plan 调用中传递 runtime_root=runtime_root,并在实际调用者层覆盖两个相反模式组合。
F4 — [P2] 已有作用域测试未随本次产品契约更新
四个聚焦配置测试模块共 85 passed / 2 failed。失败均为 tests/capabilities/test_capability_configuration_ui.py::test_capability_scope_matches_product_ownership 的两个 explore_harness 参数行:仍期望 ["goal"],当前结果为 ["machine", "goal"]。在准确合并基线运行同一作用域组,16 项全部通过。应按照本次已更新的配置归属契约同步预期,保留机器 mode-only、Goal-local profile/scope 及不支持作用域的拒绝断言。
我的整体评价
REQUEST_CHANGES。 功能目标和现有 owner 复用可以保留,但 F1 会在没有对应研究结果时真正完成 canonical Todo,应优先修复;F2、F3 分别导致错误配置写回和跨 runtime 配置混用。随后更新作用域测试。修复仍属于当前 PR 的完整功能切片,不需要扩展成无关框架或迁移。
| 独立执行的验证 | 结果 |
|---|---|
tests/capabilities/test_explore_machine_defaults.py + test_explore_turn_context.py |
49 passed |
tests/test_chat_machine_configuration_api.py、tests/test_chat_goal_configuration_api.py、tests/capabilities/test_capability_configuration_ui.py、tests/capabilities/test_machine_configuration_goal_defaults.py |
85 passed, 2 failed,失败见 F4 |
| 准确合并基线的 scope ownership 参数组 | 16 passed |
tests/control_plane_ts/explore_configuration.test.ts + explore_turn_context.test.ts |
两个测试文件通过 |
| 真实 SQLite 显式/继承完成对照 | F1 已复现,并读取到 open/done 差异 |
| 配置处理函数与生产 TS 表单投影往返 | F2 已复现 |
| 实际 Todo plan producer 的双 runtime 对照 | F3 已复现 |
验证输入均为一次性合成数据,未接触真实 Goal。未运行全库 CI、原生 Windows 或完整浏览器交互,不将作者报告的检查等同于本评审独立执行的证据。尚未复现的相邻锁/并发风险没有列为独立 finding。
评审工作流限制:本环境无法通过 GitHub CLI 完成 loopx pr-review 的元数据读取,未生成可用于 --check-result 的有效评审包,因此不声称自动评审包或结果校验通过。这里的保守 REQUEST_CHANGES 基于以上准确提交的源码和已执行证据;工作流缺口属于评审环境,不作为作者的代码缺陷,也不授予合并资格。
英文简短结论
English verdict: REQUEST_CHANGES — reviewed e5a72a00c262857f0865f92daa120bf354d3d36c. Machine-inherited planning allows a real SQLite canonical Todo to reach done without its required typed research result, while explicit Goal planning rejects the same input. Sparse Goal overrides also misinitialize the settings form, and Todo settlement plans omit the selected runtime root. Focused validation produced 49 passes plus 85 passes/2 new scope-test failures; the three behavioral counterexamples were independently reproduced. Preserve the current design and repair these integration gaps before merge.
| return | ||
| goal = find_registry_goal(load_registry(registry_path), goal_id) or {} | ||
| harness = (goal.get("spawn_policy") or {}).get("explore_harness") or {} | ||
| harness = (resolve_explore_goal(goal, runtime_root).get("spawn_policy") or {}).get("explore_harness") or {} |
There was a problem hiding this comment.
[P1] 将继承模式接入原生 Todo 完成证据校验
这里让 legacy completion 使用有效 Explore 配置,但 control_plane/capabilities/explore_research_terminal.ts:38–40 的 canonical 完成 guard 仍只读取 raw registry harness。Goal 保留 composition_mode=explicit_only/scope、mode 继承机器 planning 时,native guard 因缺少 raw enabled:true 返回无需证据。
已用真实临时 SQLite authority 复现:同一任务 frontier 均为 scheduled=1/observed=0,显式 Goal planning 会拒绝缺少 typed experiment observation 的完成操作并保持 open;机器继承 planning 却返回 completed:true, provider_status:applied, capability_completion_evidence:null,canonical Todo 变成 done。请在 native guard 的 disabled early-return 前复用同一有效模式解析,并增加显式/继承模式的真实后端拒绝与成功对照,保留 source revision 和图锁约束。
There was a problem hiding this comment.
已在 92f739a565c8aa11d376df6636a4efde96d98616 修复。native guard 先使用现有 typed mode owner 判断显式覆盖,继承模式则交给原来的 source-selected snapshot host,通过同一个有效配置解析器读取设备偏好。原 registry SHA 检查和图锁保留;继承时同时保持既有设备配置锁直到事务释放。
已扩展真实 File/SQLite 完成测试:显式与机器继承模式都拒绝缺失结果并保持 canonical Todo open,接受当前任务/输入的有效 observed、dismissed 证据,覆盖 deferred/replay。另加真实子进程测试证明设备配置锁和图锁在 release 前均不可取得,release 后可取得。修复前继承 SQLite 用例复现了 DID NOT RAISE;修复后对应组通过。没有通过前端或 legacy guard 替代 native 验证。
| feature_id = str(feature.get("feature_id") or "") | ||
| if feature_id not in { | ||
| "todo_replan_cadence", | ||
| "explore_harness", |
There was a problem hiding this comment.
[P2] 为 Explore 的稀疏覆盖值同步适配 Goal 设置表单
加入这里后,合法的 profile-only Goal 返回 current={profile:"adaptive-resilient"},effective mode 可以是机器继承的 planning。现有 goal-capability-settings.tsx:100–111 优先用非空 current,再由 projectEditableCapabilityConfiguration 用产品默认 mode=off 补缺,因此表单显示 off。
用真实配置处理函数和生产 TS 投影器完成往返后确认:只修改 profile 并保存,会把 planning/machine_default 写成 off/goal_override。请从 effective 值初始化继承字段,并明确保留 mode 的覆盖意图;补上 profile-only/composition-only 的表单写回回归。
There was a problem hiding this comment.
已在 92f739a565c8aa11d376df6636a4efde96d98616 修复。Goal editor 合并 effective 显示值和稀疏 current,独立保留 mode 的写入意图;未编辑模式时从写入投影移除 mode,JSON 往返同样保留继承。配置 handler 也允许省略 mode/enabled 的 profile/组合更新。
真实配置处理函数 + 生产 TS projector 的 profile-only、composition-only、显式 evidence/off 往返测试通过;设备模式随后改变时,稀疏覆盖继续继承。Ego packaged 页面也验证只改 profile、JSON 往返、保存、显式 off、清除覆盖和刷新。原组件在同一 planning 后端显示 off,当前组件显示 planning;匹配截图已更新到 PR 描述。
|
|
||
| def produce(): | ||
| _, graph, _ = _policy(registry_path, identity["goal_id"]) | ||
| _, graph, _ = _policy(registry_path, identity["goal_id"], runtime_root) |
There was a problem hiding this comment.
[P2] 从 Todo settlement 调用者传入选定的 runtime_root
新参数已在 quota 侧传递,但 cli_commands/todo.py:_todo_settlement_plan 仍只传 registry_path,尽管它已经持有显式 runtime_root。于是这里会回退到 registry 声明的目录读取机器配置。
实际 Todo plan producer 的双目录复现:registry off/selected planning 时遗漏 attachment,反过来则在 selected off 时添加 attachment;同一计划的 writeback 命令却指向正确的 selected root。请在该调用处补 runtime_root=runtime_root,并测试两个相反配置组合,确保诊断/恢复命令的显式目录与策略来源一致。
There was a problem hiding this comment.
已在 92f739a565c8aa11d376df6636a4efde96d98616 给 _todo_settlement_plan 补传 runtime_root=runtime_root。测试直接调用实际 Todo plan producer,覆盖 registry off / selected planning 和 registry planning / selected off 两组;attachment 与 writeback 命令均使用选定 root。
同样两条测试在进程内载入不可变原 head 的原始 producer 后均失败,当前实现均通过;没有用直接调用 attachment helper 代替调用者层验证。
| "supported_scopes": ["machine", "goal"], | ||
| "writable_scopes": ["machine", "goal"], |
There was a problem hiding this comment.
[P2] 同步既有 capability scope 测试契约
作用域扩展符合本 PR 的功能目标,但 tests/capabilities/test_capability_configuration_ui.py::test_capability_scope_matches_product_ownership 的两个 explore_harness 参数行仍期望 ["goal"]。当前四个配置测试模块实际为 85 passed/2 failed;在准确合并基线,同一作用域组 16 项全部通过。
请按新产品契约更新这两行,并保留机器只开放 mode、profile/scope 留在 Goal 以及非法作用域拒绝的断言。这是本次变更引入的测试回归,不能沿用旧的通过结论。
There was a problem hiding this comment.
已在 92f739a565c8aa11d376df6636a4efde96d98616 将 Explore 的 scope 断言更新为 machine + Goal,并去掉重复参数行。机器编辑器只暴露 mode、profile/组合 scope 留在 Goal,以及非法作用域拒绝的原有断言保留。capability UI 模块和真实机器配置 HTTP/contract 测试均通过;原来的两条失败未计入通过结果。
…ork-recovery-20261026 fix(chat): continue explicitly unfinished project work once
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
Reviewed exact head: 92f739a565c8aa11d376df6636a4efde96d98616. Re-review of the complete PR after the four findings on e5a72a00c262857f0865f92daa120bf354d3d36c.
动机
希望在设备上统一选择探索模式、同时保留各 Goal 独立权限和覆盖值的用户。
用户把设备探索模式设为 planning 后,已有和新 Goal 应沿用该偏好,显式关闭的 Goal 仍保持关闭;修改其他字段不应偷偷固定模式,恢复沿用后应读回设备值。
174 项聚焦 Python 用例、39 项 typed 测试与真实页面保存回读通过,旧四项修复已有独立证据;但 refresh-state 的图更新仍忽略显式 runtime,两个相反配置都复现错误。
本 PR 不传播身份、派生权限、租约、配额或外部发布授权,也不证明模型采用、长期收益或已安装产品行为。
改动思路
设备模式属于可复用偏好,显式 Goal 模式与执行权限仍应由原 owner 管理;现有设置、typed resolver 与 canonical completion 可以承载此设计。
当前 PR 的边界是设备模式继承的完整用户路径及真实 runtime 消费者;需把 refresh-state 已选定的根传至图更新后置检查,不扩大到新执行权限。
设备只保存 mode 这一不可推导的用户偏好;有效模式是显式 Goal 值、设备值、默认 off 的派生投影,不能再保存一份需要同步的“有效模式”。Python 负责配置 IO/适配,TypeScript 继续拥有 mode/legacy flag 的语义。表单先展示有效值,只在用户真的修改模式时写入覆盖;profile 和 composition 的修改不构成模式授权。native completion 读取受锁保护的同一有效配置/研究图快照,随后仍由 canonical Todo transaction 校验 typed result、CAS 与 replay。这个完整路径比另建设置框架更小;复制 preset 也无法满足已有与新 Goal 的实时继承。
本次两种显式根输入的实际行为如下;表格只展示真实 CLI 结果,不是流程图或收益证明:
| registry 的模式 | 显式选定 runtime 的模式 | 应有 graph enabled | 当前 refresh-state |
|---|---|---|---|
| off | planning | true | false / disabled |
| planning | off | false | true / not_applicable |
两次 CLI 都 exit0 且 appended=true;这正说明写回成功不能代替后置语义一致。
具体改动
实际 merge-base 15803cd7dcc2fc517049809bbe58998f04f5acac 至 head 为40个文件、+747/-71,其中33条文本路径和7张PNG。完整检查了 typed resolver、Python消费者、设备/Goal目录与API、表单、native completion、材料写回、双语说明及截图;队列元数据中的额外 main 分歧不算进本 PR。
关键代码讲解
resolveExploreGoalConfiguration在同一 typed owner 中组合模式。显式 mode 或 legacy false 优先,只有 profile/composition 的稀疏对象不固定模式,默认仍为 off。resolve_explore_goal读取传入 runtime 的设备配置并投影副本,不重写 registry。此函数正确与否不能替调用方证明传进来的根就是本次选择的根。goalExploreWriteValue用临时 modeOverride 区分展示值与用户意图,支持 JSON/表单往返和恢复继承。真实页面只保存 profile 后,当前 Goal 没有 mode,回读仍为设备 planning;显式 off 清除后也读回 planning,spawn_allowed 仍为 false。sync_explore_graph_after_material_refresh新增设备模式解析,却在95行重新按 registry 选择根;refresh-state 调用方已经持有选定 runtime,未把它传到这里,形成新 F5。
规范依据为 docs/architecture/rfcs/desktop-execution-frontends-v0.md,spec_revision 15803cd7dcc2fc517049809bbe58998f04f5acac。该 RFC 自身在本 PR 成对修改,所以采用变更前的 ownership、一致性和继承恢复要求评判;原 Goal-only 模式拆成可复用偏好与本地绑定是本提案的明确行为变化,不能据新文案直接宣称所有消费者一致。
Settings ownership and scope:implemented。174 Python +39 TS; real device/Goal editor readback and seven committed captures.Catalog declarations, runtime resolution and the UI must agree:not_met。The accepted Goal-only scope is intentionally proposed to split reusable mode from local bindings; typed/UI scope does that, but refresh-state reads device mode from a different root than its explicitly selected runtime.Restoring inheritance:implemented。Actual browser profile-only save retains absent mode, JSON roundtrip and explicit-off override removal reads back planning.
旧四项分别保留结论:F1 native completion 的 machine-inherited 证据门已修复,旧 e5a 的同一测试在 File/SQLite 两次均出现 DID NOT RAISE,当前通过且覆盖精确 observation/CAS/replay;F2 稀疏 profile 的 mode 固定已修复,typed/API 用例与真实打包页面保存/JSON往返回读吻合;F3 Todo settlement plan 的显式根已修复,旧 head 两个相反根失败、当前通过;F4 scope matrix 的 Goal-only 重复行已改为设备仅 mode、Goal 完整字段,旧 head 两个 scope 断言失败、当前通过。旧审查记录不被抹去,也不能替代本 head 的整体判断。
对主干的风险
[P2 / F5] 材料写回后的图更新必须沿用显式选定 runtime。 activation.py:95–96 的路由调用没有 runtime_root_override。refresh-state 已经在显式根写回成功,后置 hook 却去 source registry 的设备设置读取 mode。两组相反模式通过未修改的真实 CLI 与一次性 File authority 均复现上表错误;probe 没有 mock 决策 hook。测试关闭外部 sink,图为空,所以不把结果扩大成实际外发、丢失 finding 或已发生执行。
最小修复:从 refresh-state 将已经确定的 runtime_root 传到 activation,并复用现有 route override;没有显式根时继续使用正常 source route。请在现有 tests/capabilities/test_explore_machine_defaults.py 加上两种真实 refresh-state 相反根场景,再重跑当前聚焦组;不能只再测 Todo settlement plan,也不能禁用 graph postcondition 来掩盖差异。
语义与 CI 对齐
现有 off/evidence/planning 词汇被复用,新增的是已注册的设备配置 envelope。关闭路径、legacy false、稀疏 profile、已有/新 Goal 与删除覆盖已作成对检查;但 selected-off 的材料写回仍不隔离,default_off_isolation 当前为 not_isolated。required-contract 文案从 Goal-only 改为设备或 Goal 选择是有意披露的激活条件变化;它没有授予 spawn/claim/lease/quota,native typed-result 要求仍是执行约束,不能称作可忽略的指导。没有新领域子串分类。
独立验证:174 Python passed、39 typed tests passed、control-plane typecheck 与 build:chat passed。premerge 的6项直接检查与19项自动检查通过;原始总结果保留 quality_stale_receipt 与7项图片人工 hold,七张PNG已逐一看像素/元数据,不能把原始运行改写为全绿。新的两个真实 CLI oracle 是失败,change-quality 因 F5 保持 FAIL。33条文本路径公开扫描通过。依 wait_for_ci=false 策略没有查询或等待 CI。没有把旧头的预期反例失败、测试启动时的配置错误或作者自报的更广测试结果冒充当前新缺陷。
我的整体评价
REQUEST_CHANGES。 设计规模与减少重复配置的需求相称,设置、typed resolver 和现有 mutation owner 的复用合理;无需新权限模型或扩展到其他 roadmap。兼容上应保留已存 legacy false 与显式模式意图,而不是为减代码抹去它们。long_horizon 仍为 regression:材料刷新与选择的设备状态不一致,会误报后续图交付姿态;user_experience 在真实配置保存与恢复路径上有已验证改善,但配置 UI 成功不足以资格化普通材料写回任务。
已检查真实后端打包页面的默认、展开与恢复状态,以及七张精确 head 中的公开截图;来源和配置范围可见,窄屏底部操作需在卡片内滚动。 未验证已安装桌面端、真实用户理解、模型采用或持续收益;窄屏展开 raw JSON 的完整可读性未资格化。截图不证明持久化,保存结论另由真实 API 回读支持。
页面验证使用当前源代码打包的 chat、生产 serve_chat 和真实 File store 的合成隔离数据,完成设备/Goal切换、profile保存、JSON往返、清除覆盖和状态回读;没有启动模型任务。默认页面把当前来源和主要输入置于卡片内,说明/原始JSON按需展开,窄屏通过卡片滚动到操作区;七张仓库截图的原作者证据来源另行保留,不能替代运行态回读。请修复 F5 并用两组真实消费者反例复审,当前不建议合并。
English verdict: REQUEST_CHANGES — reviewed 92f739a565c8aa11d376df6636a4efde96d98616. The four earlier fixes are independently supported, but material refresh still resolves device mode from the registry runtime instead of the explicitly selected runtime. Both opposite-root cases fail through the real CLI; carry the selected root into activation and cover both directions.
| if goal is not None: | ||
| from .machine_defaults import resolve_explore_goal | ||
| from ...control_plane.runtime.runtime_projection_route import resolve_goal_source_runtime_route | ||
| route = resolve_goal_source_runtime_route(registry_path=registry_path, goal_id=goal_id) |
There was a problem hiding this comment.
[P2 / F5] 材料写回后请沿用显式选择的 runtime。refresh-state 已持有本次 runtime_root,但此处重新按 registry 解析且没有 runtime_root_override,因此设备模式来自另一个根。真实 CLI 两组相反配置都复现:registry off/selected planning 返回 graph disabled;registry planning/selected off 返回 enabled,尽管两次都 exit0 且 appended=true。请从调用方传入选定根并保留缺省 source route,再用两组真实 refresh-state 回归;现有 Todo-root 测试没有覆盖此后置 hook。外部 sink 在复现中被关闭,没有实际外发的结论。
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Explore mode can be inherited live from the device by existing and future Goals. An explicit Goal mode, including legacy disabled flags, still wins. Device configuration owns only the mode; profiles, composition scopes, spawn permission, leases, quota and publication authority remain Goal-local. The product default stays off.
This revision repairs the five findings from reviews #5653446360 and #5656138717:
Validation
Repair author: model_agent (Codex); model family: GPT-6, exact serving identifier unavailable; provider: OpenAI; declaration_source: self_reported.
Tested head:
9b2de9385b93ecd6579a34c1849cc3c922f97ec2. PR merge-base:15803cd7dcc2fc517049809bbe58998f04f5acac. The existing desktop-execution-frontends-v0 RFC supplies the ownership and runtime/UI consistency criteria; this PR explicitly proposes the reusable device-mode preference while preserving Goal-local permissions.92f739a5implementation before the production fix: registry off / selected planning incorrectly disabled the graph; the reverse incorrectly enabled it. They now pass, including selected-root run readback, unchanged registry, untouched other runtime and suppressed external delivery. Two additional cases preserve canonical source routing without an override and explicit-off precedence with one.92f739a5: the same UI components and seven image blobs are unchanged by this backend-only repair. Those captures verify the source-packaged sparse-form journey; they do not qualify an installed App, model adoption or long-term utility.9b2de9385still fails the existing top-level Python module budget (146 modules against 145, includingworkflow_skill_install.py). The merge-base and observed main798543b8have the same module count and identical budget test. This baseline failure and the independent exact-head re-review remain open; the PR is not merge-qualified.Visual evidence
Primary question: does a sparse Goal show the actual inherited mode, and can another field be saved without creating a mode override? Existing controls and optional help remain in place; no extra required interaction was introduced. The default form, expanded optional help/JSON and lower settings were inspected on desktop and narrow layouts. Narrow fields require ordinary vertical scrolling and have no horizontal overflow.
The before UI uses the original component at
e5a72a00c262857f0865f92daa120bf354d3d36c; after uses the exact component at92f739a565c8aa11d376df6636a4efde96d98616. Both read the same synthetic Goal and real isolated backend with device planning. Captures show source-packaged behavior, not an installed App or measured adoption/utility.Original device activation captures remain in the changed image set; the inheritance repair uses the matched views above. No installed-product, external execution, review approval or merge qualification is implied.
设备模式仍默认关闭,Goal 显式模式优先。修复覆盖原生任务完成证据校验、稀疏表单继承意图、Todo 和材料刷新 runtime 路由及作用域测试;普通 profile/组合字段编辑不会把继承模式意外固定。真实 File/SQLite 与配置 HTTP 路径已验证,留待精确 head 复审。