Skip to content

fix(desktop): open original child Goals in the installed workspace - #6910

Merged
loopx-agent merged 4 commits into
mainfrom
codex/native-app-real-goals-20261020
Oct 19, 2026
Merged

loopx-agent merged 4 commits into
mainfrom
codex/native-app-real-goals-20261020

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Installed workspaces could not navigate original experiment Goals under a local parent; a standalone reader required a separate URL. This change persists source references in the existing workspace registry and reads the original Goal, Tasks and Explore history through the normal Chat service. Source execution stays on its original runtime; local trajectory analysis uses the existing benchmark-toolkit owner and starts only on an explicit request.

It also fixes Finder-launched runtime preparation when a supported Homebrew Node LTS is installed in a versioned directory: both installer and service discovery use that bounded path. Recovery diagnostics distinguish an observed missing Node from an unexplained installer exit.

Validation

  • 28 Python tests covering actual HTTP, disposable native CLI sources, namespace isolation, source disappearance/reconnection, explicit analysis, cancellation/reuse and source immutability.
  • 21 TypeScript tests for source organization and trajectory/history owners; dashboard TypeScript check and packaged Chat bundle build/verification.
  • 152 native tests and 7 recovery-diagnostics tests; signed-release fixture qualification remains externally gated.
  • Packaged renderer against the normal Chat backend: parent/child navigation, original Task detail, no edit controls, desktop and 390px layout. Full risk-based premerge passed on this exact head: direct checks, 10 catalog canaries, 8 risk-profile smokes and public-boundary scan.
  • The existing broader progressive-loading browser smoke exposed unstable retry/duplicate-text selectors and did not pass; it is unchanged here. The affected source journey was separately exercised with Ego against the real normal backend.
  • Installed rollout and real experiment readback follow merge; these images are synthetic validation, not installed-user or model-judgment evidence.

Visual evidence

Tested source revision: 89d87ac0c31cf2f05e4f8c637a862c9113f4a065. The synthetic source is a real disposable native CLI/registry, consumed by the normal Chat service and packaged renderer. No original benchmark text, user messages, paths or live operating state are published. “Before” shows the parent before an original source link exists; “after” opens the original child within the same local workspace.

Before After
Parent before linking Original child in the local workspace

390px source Goal

Boundaries

Local parent organization is a presentation relation, not solver registration or execution authority. Physical source identity pins caches, cursors and analysis storage; conflicting identities/parents are rejected. Opening or refreshing a Goal does not launch model analysis. A disconnected source cannot admit new analysis, while its already running local analysis remains cancellable. The source-off path retains existing behavior. Cleanup removes only a local link and preserves the original runtime and local analysis artifacts. Retained links whose local parent was removed cannot make other Goals unreadable; new links still require a valid local parent.

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>

@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: model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=max

Request changes conclusion (author-owned PR; GitHub blocks formal self-review)

REQUEST_CHANGES — [P2] 合法删除一个本地父 Goal 后,遗留连接会阻断另一有效来源。 本结论覆盖 7c36c23d47a971c2bb89edbf265e2d27a78aefac 的完整30路径。此前任务详情 namespace 缺口在新头已修复,不再算阻塞;本次报告的是通过现有 owner 生命周期操作独立复现的另一条路径。

动机

在正式本机 App 中查看原实验 Goal、原任务和研究历史的用户,需要它们留在原运行环境,并能在本机明确启动独立分析。 例如两个运行环境都有同名 Goal 和任务:本地父 Goal 可以挂接原来源,但换源后旧详情不能继续按同一个裸 Goal/Todo 地址读取新来源;否则同一页面会把别处正文当作原记录。 普通 Chat 后端能持久挂接原来源并显式本机分析,旧任务 namespace 缺口已修复;但通过真实 owner 流程删除一个本地父 Goal 后,来源目录与另一父级下有效来源的状态读取都返回500。 本轮不修改真实求解 Goal、不调用真实模型、不安装候选 App,也不把打包 renderer、合成数据或源码测试当成正式 App 与真实实验源的最终验收。

仍需修复父级删除后的本地引用收尾与跨来源故障隔离;正式 App 安装、真实来源父子导航和分析读回仍由原交付任务保留。 普通用户不应再整理独立 reader URL、复制配置或新建一个空分析 Goal;已有意图和授权应由 Agent 复用,额外决定只留给真正缺失的意图或会调用模型的分析。当前 normal Chat 入口有真实价值,但一个父级的清理不能使另一个父级下的原记录消失。

改动思路

来源组织复用既有 registry 与 TypeScript 展示 owner,读取复用原 native source reader,分析继续归现有 benchmark-toolkit;本地关系不能授予原求解环境写权限。 当前 PR 应交付普通 Chat/App 中的原来源挂接、完整读取与显式本机分析,以及已观察 Node 缺失的启动诊断;安装后的真实用户旅程另行读回。

本地只保存引用,原 Goal、Task、图边和研究日志不复制成执行 Goal;本机分析使用 namespace 隔离的现有store/provider。这个范围比另建reader或镜像Goal合理。当前漏掉的是这份新持久关系与既有“停止并删除本地Goal”生产路径的衔接:对新配置的严格校验,被直接用于所有后续读取;父级合法消失后,整个catalog都因一个旧引用失败。

分支 当前观察
正常连接/重开 原来源与本机组织关系保留,无新solverGoal
旧Task来源已被替换 已修复:旧namespace409,新来源可读
原求解来源离线,停止已运行本机分析 新代码保留链接/namespace/pack检查,取消不再要求求解端往返
删除父级A,读取另一父级B的来源 目录及B状态均500,需收尾或隔离A的失效关系

具体改动

代码 merge base 260fc9bd4ee76c8b2cfc82e4723473b2d207976f;全量 30路径 +756/-41 已读,并比较49af→042d→7c36的完整增量。普通Chat/TS来源组织、只读Task、分析scope/取消、Node启动与配套回归构成同一提案;没有原solver写入、计分/提交或新Agent生命周期。

关键代码讲解

  • projectGoalSourceLinks:新增连接时要求本地parent、无Goal冲突和合法namespace是合理的;但任何一条旧link找不到parent时,整个数组都会throw。
  • linked_source_goals / GoalSourceCatalog.resolve:先投影全部link,再选目标Goal。因此A的失效parent会拦住原本有效的B,还没到B的native reader。
  • ChatStatusRequestMixin._status:目录与单Goal状态都先构造共享directory;该异常变为500。只给B重试不能消除A的遗留关系。
  • _todo_detail及原TaskRequest调用链现在携带、读回和比较namespace;key/读取identity也纳入来源,旧任务反例已恢复正确拒绝。
  • _research_analysis_scope:启动/重试仍需新鲜原成员;已有本机job的取消保留当前链接、namespace、pack及原Goal范围,避免求解端离线把取消卡住。

变更前规格先于实现读取:spec_ref=docs/reference/trajectory-assessment.md#existing-isolated-goal-sources,spec_revision=2b466f63f33ad7951d88645d4af596fb18db847e;另读同版frontend-delivery的物理源、同名Goal、失败/恢复与默认只读条款。original-goal-and-source-immutability、physical-source-pinned-reads、explicit-local-analysis 在此切片 implemented;independent-source-failure-isolation not_met;installed-original-app-qualification 由原交付任务保留。新增Native App说明是提案披露,不能自证正式安装验收。

对主干的风险

独立实际反例配置两个可抛弃native来源:A挂在本地parent A,B挂在仍有效的parent B。先从普通HTTP目录读到B,然后调用仓库原 set_goal_activation_state 的preview/apply,再调用 delete_stopped_goal 的preview/apply,携带其真实当前fingerprint与source basis;停止、删除均返回ok。此后本地Goal只剩B的parent,goal_source_links仍保留两条,/status.json?view=workspace-directory 和 B 的 /status.json?goal_id=... 都返回500。原来源registry、state与Explore日志字节未变。

这不是手工塞坏配置或绕过owner:是新关系没有跟随已经存在的合法生产者变化。删除服务只移除Goal项,新的link投影却要求所有parent都还存在;一个失效引用因此成为所有来源读取的全局前置。源码与HTTP失败相互印证。反例已在042d及本次精确7c36重复;没有把仍可用的其他本地路径夸称为整个App崩溃,也没有声称原求解状态丢失。

最小修复: 保留新连接对不存在父级的拒绝;在既有父 Goal 删除/组织读取 owner 内处理失效引用,只收尾或隔离受影响的本地关系,让另一父级下的有效来源继续可读。不得复制、删除或改写原求解状态。 补实际owner停止/删除A后的目录、B状态/任务/历史阳性;A原来源与本机分析产物保留,创建一个本来不存在的parent仍须拒绝。不要只让用户手改registry,也不要用放宽所有来源身份校验来掩盖收尾缺口。这个范围属于本PR新增关系的同域集成,无需新建第二个catalog、权限账本或控制面框架。

此前任务反例已独立复核:旧头同一裸Task URL会返回B全文;042d修复后,当前生产调用带期望namespace,实际双native来源对照得到旧A409、新B200,原A文件不变。新代码也拒绝已解除来源的foreign namespace落回本地分析;本机运行中的分析取消不再依赖求解端在线。它们是有效修复,不应继续算旧阻塞;不过它们没有覆盖本地父级正常删除这一生产者。

本头独立HTTP/source/runtime/普通本地Task组合 40 passed,另有双来源精确selector oracle通过;两项新分析/离线取消回归已包含。Rust/native在修复源码上 152 passed、6 ignored,外部条件夹具未算通过;3项TS组织与7项boot通过,两端typecheck、Chat打包/严格manifest、9路径Ruff、DCO与标准premerge已有各准确版本记录,本头完整standard premerge也已再次通过;这些绿色检查不能替代父级删除负例。新头Rust/UI主体与已测42版本逐项比较未变;没有把未跑的验证或作者152声明代作独立执行。Task和父级负例使用实际普通Chat、nativeCLI与owner,不伪造响应;模型provider仅用可销毁合成进程。未查询/等待CI。

已实看PR合成normal-backend桌面与390px截图,标题、只读来源和单独分析用量均可辨;这不能代替正式App/WebView或真实实验读回。Node路径限于已有支持的Homebrew22/24;缺Node只在环境确实观测为false时解释,未知exit1仍保留未知。通用progressive-loading浏览器smoke的历史失败记录保留,未冒称全套通过。当前明确阻塞是跨来源500,非额外安装确认或无关全仓重构要求。

我的整体评价

REQUEST_CHANGES / justified_increment。 来源组织复用既有 registry 与 TypeScript 展示 owner,读取复用原 native source reader,分析继续归现有 benchmark-toolkit;本地关系不能授予原求解环境写权限。 当前 PR 应交付普通 Chat/App 中的原来源挂接、完整读取与显式本机分析,以及已观察 Node 缺失的启动诊断;安装后的真实用户旅程另行读回。

长程归属在原solver/Task/历史和既有provider边界内保留,namespace与离线取消修复有价值;用户旅程仍有可复现regression:一个合法parent删除让另一来源不可读。请在既有生命周期/引用owner内修复后,以新exact head复核当前30路径。不能因新头解决了上一次finding或本地绿色检查而继承批准。

未改作者工作树、真实求解Goal、生产App或模型账户,没有merge/dismiss。既有原生源、纯TS投影和toolkit复用是适度设计;当前还缺新增关系的生产者收尾,正式安装、真实采用与模型效果/完整成本也仍未被这些源码证据证明。

English verdict: REQUEST_CHANGES — 7c36c23d47a971c2bb89edbf265e2d27a78aefac fixes Task namespace pinning, but legitimate owner stop/delete of local parent A leaves an orphan link that makes the shared source directory and an independent valid source B return500. Reproduced through actual Chat/native sources and existing lifecycle preview/apply with current fingerprint/source basis; original source bytes stay unchanged. Retire/isolate only the affected local relation while retaining strict new-parent admission and B positive controls.152 native tests pass with6 externally conditioned ignores; source/types/build and risk checks have exact-revision records. Installed/live-model qualification and CI were not substituted for this concrete failure.

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: model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=max

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

APPROVE — 89d87ac0c31cf2f05e4f8c637a862c9113f4a065 的完整30路径提案已复核,当前无阻塞 finding。 同一独立反例确认任务物理来源和父级删除后的隔离都已修复;旧头的 REQUEST_CHANGES 保留为历史证据。此结论批准下面明确的源码提案,不宣告正式 App 安装或原用户任务完成。

动机

原来源中的 Goal、Task 和研究历史需要从普通本机工作区直接进入,并继续归原运行环境所有。独立 reader URL 只能证明读取通道,不能满足在日常 App 中查看原记录的需求。例如两个物理来源拥有同名 Goal/Task,本机父级只表达组织关系;任务内容、历史 cursor、分析目录必须继续固定到选中的物理 namespace,避免换源后把另一份正文当作原记录。

本PR把既有原生来源 reader 接入正常 Chat 服务,保存本地引用并复用已有分析 provider/store。普通 Chat 服务持久挂接原来源并读取原 Task/历史,分析仅显式在本机启动;旧 Task namespace 拒绝换源混读;真实 owner 删除一个父级后,另一来源与目录继续可读。 这使原记录能够在同一工作区进入,也把后续修复限制在实际调用链。正式 App 安装、真实来源父子导航与分析结果读回仍由原交付任务完成;源码、合成后端与打包 renderer 不能替代安装验收。 本轮没有触碰真实求解 Goal、调用真实模型或安装候选 App;没有以测试数量、源码批准或截图代替最终用户结果。

改动思路

组织关系归既有 registry 和 TypeScript 展示 owner;原 Goal、Task、原生父级和执行状态继续归源端;显式本机分析归原 benchmark-toolkit。普通 GET、切换和刷新不启动模型,也不把来源复制成第二个执行 Goal。来源断开时,新的分析仍要求当前原成员;已运行的本机分析可以在链接、namespace、pack与Goal范围匹配后取消。

本PR交付正常 Chat 中的原来源组织、读取和显式本机分析,以及有证据的 Node 启动诊断;正式 App 安装与真实来源旅程由原交付任务继续读回。

这次修复保留了一条关键区别:新增连接必须完整校验,既有关系的读取则要适应合法生命周期变化。父级消失只让对应本地组织项不再投影,保留原引用和产物供精确解除;不得让该项阻断另一个有效来源。写侧复用同一投影确认目标确实被接纳,在原 registry 锁内再次检查父级和冲突,不能因读侧容忍旧引用就接纳未知父级。

路径 当前可观察行为
普通挂接、重开、原任务/历史 原来源身份保留,无镜像 solver Goal
A来源解除后接入同名B来源 旧Task selector409,B selector200且正文不同
正常owner停止并删除父级A 目录和另一父级下来源B仍可读
新连接指定未知父级/本机身份冲突 拒绝且registry不变
原来源离线,取消已运行本机分析 保留当前scope检查,取消不再依赖源端往返

具体改动

代码 merge base 为 260fc9bd4ee76c8b2cfc82e4723473b2d207976f;完整 30路径 +813/-41 已读,49af→042d→7c36→89d8各增量及相邻owner重新核对。来源组织与正常Chat IO、只读Task/历史、显式本机分析/取消、Node启动诊断和对应测试/文档构成同一可回退提案。

关键代码讲解

  • projectGoalSourceLinks:纯TS投影保持namespace和重复身份校验;缺失父级或被本机身份覆盖的保留项只在读取时省略,其他项继续返回。它不改原记录,也不创建执行Goal。
  • GoalSourceCatalog.update / admitted:先确认提议目标确实出现在同一投影中,再验证原生成员;提交时在既有registry reducer锁内再次检查,未知父级与本机身份碰撞仍拒绝。原namespace精确解除路径保留。
  • GoalSourceRequestMixin._todo_detail:请求必须携带期望来源namespace;原Task返回前重读当前连接。已解除的foreign selector不能落回本机Task;UI请求identity/key也携带来源。
  • _research_analysis_scope:新分析/重试要求当前原成员;已有本机job取消保留链接/namespace/pack检查。分析store继续按物理来源隔离,不新增solver、计分或提交权限。
  • node_environment / runtime_search_path:在现有Finder启动路径中补支持的Homebrew22/24目录;只有实际观察Node缺失时才解释为缺Node,其他exit1仍保留未知诊断。

规格先于实现读取:spec_ref=docs/reference/trajectory-assessment.md#existing-isolated-goal-sources,spec_revision=2b466f63f33ad7951d88645d4af596fb18db847e,另读同版frontend-delivery的物理来源、失败恢复和默认只读约束。original-goal-and-source-immutability、physical-source-pinned-reads、explicit-local-analysis、independent-source-failure-isolation 在此提案 implemented;installed-original-app-qualification 明确保留给原安装交付任务。新文档的Native App段落是范围披露,不能成为自己的验收依据。

对主干的风险

已用相同独立实际反例复核两次修复。第一条构造两个真实可抛弃native来源,保留同名Goal/Task但改变物理路径和正文;当前头读取旧A selector得到409,B selector得到200和不同正文,原A registry/state/Explore日志字节保持不变。没有伪造Task响应或把路径差异归一化掉。

第二条连接A、B两个来源到不同本地父级,先确认目录中B存在,再使用现有 set_goal_activation_state 和 delete_stopped_goal 的真实preview/apply,携带当前fingerprint与source basis。7c36上停止/删除都成功后,目录和B状态返回500;在89d8上使用同一oracle,两次owner操作仍成功,目录返回有效父级B及来源B,B状态正常,原求解文件字节未变,两个原始引用仍保留。仓库回归另确认孤立引用可按namespace精确解除、未知父级/本机身份冲突的新注册拒绝且不写registry。没有要求删除原来源,也没有用放宽写入校验掩盖读取失败。

当前精确头独立 43 Python passed:41项普通HTTP/source/runtime/analysis/本地Task检查,加2条上述独立物理来源/真实owner oracle;5项TS组织+7项boot通过,9路径Ruff、4提交DCO、完整风险premerge通过。此前独立 native Rust 152 passed、6 ignored;6项外部条件夹具仍不算通过。Rust/native、boot和dashboard相对实际已测042d源码逐路径比较未变,因此保留其准确版本的native、两端types与Chat打包/严格manifest结果;新的TS投影与Python调用重新执行,未把旧红例改写成历史通过。未查询或等待CI。

PR首屏包含正常backend/真实可抛弃native fixture的before/after与390px截图,当前引用精确修订;已实看桌面/窄屏,原来源只读与独立分析用量可辨。作者提供的Ego正常backend旅程、打包renderer和这些合成截图,均不等于正式安装WebView或真实实验采用。本轮未新增UI改动,保留已有公开安全证据。较广的progressive-loading浏览器smoke历史失败仍披露,不能称全套浏览器检查通过。真实模型效果、完整成本与用户任务完成也尚未由源码测试证明。

我的整体评价

APPROVE / justified_increment。 正常工作区到原Goal/Task/历史以及显式本机分析的调用链复用既有typed owner,当前两条材料性负例都有相同实际入口的修复后证据,未发现新的可验证阻塞。默认无来源路径、普通本地Task和无自动模型调用边界保留;读侧隔离与写侧严格接纳配合合理,没有引入第二套权限、运行时或生命周期账本。

同域有界改进已应用:Task固定物理namespace、旧foreign分析selector拒绝、断连时本机取消、合法父级删除后的读取隔离均由已有owner承担。更大重构没有实际必要。后续由原交付任务在已有授权下完成合并读回、正式App升级和真实来源旅程验证;本review未执行merge/dismiss/install,也不把partial源码验收写成原用户Goal完成。

English verdict: APPROVE — 89d87ac0c31cf2f05e4f8c637a862c9113f4a065 passes the complete30path proposal review. The same independent native-source and real owner stop/delete probes now verify stale Task selector409/new source200, continued directory/B-source reads and unchanged original bytes. Strict new-parent/collision admission remains enforced under the registry lock; explicit local analysis/cancellation preserves physical scope.43Python,12JS/TS and fullpremerge pass;152native pass/6external ignores are retained with unchanged-source checks. Installed/live-App qualification remains with the original delivery task; broader browser-smoke failure and CI-not-consulted limits remain disclosed.

@loopx-agent
loopx-agent merged commit c5ffd12 into main Oct 19, 2026
37 of 46 checks passed
@loopx-agent
loopx-agent deleted the codex/native-app-real-goals-20261020 branch October 19, 2026 19:57
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.

1 participant