Skip to content

fix(chat): respect each Goal source runtime in workspace status - #7577

Merged
huangruiteng merged 1 commit into
mainfrom
codex/fix-goal-source-status-route-20261028
Oct 29, 2026
Merged

huangruiteng merged 1 commit into
mainfrom
codex/fix-goal-source-status-route-20261028

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

多项目工作台的 Goal 可以声明不同的 source_registry/runtime。Chat 状态接口却将全局协调目录作为显式 runtime override 传给读取入口,覆盖了已有的逐 Goal 来源路由,导致有效源存储被误判为需要升级。

本次让已声明 common_runtime_root 的注册表继续使用现有 collector 和 Todo reader 的来源路由;未绑定注册表的 Chat 保留原有本地目录回退。工作台状态与 delivery review 的任务图沿同一规则读取。

验证:

  • 14 项新增真实 HTTP / File / SQLite 回归通过,覆盖完整与单 Goal 状态、delivery review、来源失效/错 Goal 时拒绝共享目录中的诱饵数据、来源切换、路径脱敏与权威记录不变。
  • 145 项既有状态、权限错误、工作台目录与路径脱敏回归通过;另有 2 项 source-session discovery / runtime refusal 回归通过。
  • Ruff、候选文件隐私扫描、标准 premerge 及其 5 项 canary 通过。
  • 基线可复现源 Todo 缺失;相同隔离存储上的修复入口能读取原始任务。

此改动只调整现有读取入口,没有界面布局、文案或样式变更,因此不附新的视觉设计稿。验证边界是源码 HTTP 服务与真实隔离存储;本 PR 不声称已升级安装中的 App,未运行完整 pytest 套件。

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 · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max

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

当前完整 head 9a33a402b1fd7526411fe68213f0171bc1b96578:APPROVE。真实 File/SQLite HTTP 对照证明来源读取恢复,并拒绝共享目录的同名诱饵。

动机 / Motivation

在多项目工作台查看不同 Goal 的任务及交付状态的操作者。

Goal 的真实任务位于自己声明的来源目录,Chat 却把协调目录当成强制覆盖,导致有效任务显示不可用,源失效时还可能读取共享目录的同名诱饵任务。

修复后状态与交付任务图都沿原来源读取,源失效时拒绝借用共享任务,修改来源后无需重启即可读到新任务。

本次只修正原状态读取调用,不改变任务权威、启动执行、安装 App 或增加新的设置流程。

改动思路 / Approach

现有 collector 与 Todo reader 已有逐 Goal 来源规则;让这个调用者停止传入协调目录的显式覆盖即可,无需复制路由、同步任务或另建配置。

完整切片是现有 Chat 状态与 delivery review 的来源读取,七行生产新增即可交付;原未绑定注册表的本地回退保留。

Chat 的历史目录与 Goal 权威目录可以不同。已声明 registry runtime 时返回 None 只表示让原 reader 按来源解析;它不表示没有来源,也不选另一个默认权威。没有注册来源的情况继续从既有controller/本地目录回退。源缺失、不兼容或错Goal仍由原路由拒绝,不从页面或任务标题猜来源。

具体改动 / Changes

完整两文件 +110/-1:生产 +7/-1、真实HTTP测试 +103。没有schema、生成文件、前端布局、安装或权限配置变化。独立diff merge base为 d415feded4162417b298f58814758a2daf91b4ed;GitHub当前base tip与merge base不是同一个概念,比较使用不可变祖先。

关键代码讲解

  • _status_runtime_root 读取当前discovery registry。common_runtime_root有声明时不给collector强制协调root;未绑定情况保留原fallback。每次读取重查来源,不缓存过时选择。
  • _goal_task_map 消费同一选择并调用既有list_goal_todos,让delivery review和状态属于同一来源。不可读任务图仍沿原错误边界处理,不生成空权威。
  • test_status_reads_source_authority_without_creating_a_chat_copy 与拒绝/切换用例使用真实HTTP及File/SQLite,断言原registry、Markdown和canonical记录不变,并检查没有在共享root创建第二份Task。fixture复用既有source-route测试,不复制provider实现。

规范依据:spec_ref docs/reference/configuration-backup.md,spec_revision d415feded4162417b298f58814758a2daf91b4ed。采用其既有canonical来源原则:source_registry → implemented,来源由原注册表owner提供;common_runtime_root → implemented,真实runtime来自source,源不可用不拿共享同名数据替代。本次不将备份操作、迁移或完整恢复作为状态bug修复的额外前置。

对主干的风险 / Risks

同一fixture内容和同一pytest命令,独立base/head结果如下。测试的预期来自真实Task身份、原来源和拒绝义务,没有用新实现生成expected值。

场景 不可变基线 当前head
完整与单Goal状态 / delivery任务图 来源任务缺失、503或无正确任务 原来源任务可读
缺失/不可读/错误Goal + 共享诱饵 仍返回200并读取共享数据 明确拒绝,不含诱饵
修改source runtime后再次读取 初始来源就不正确 无需重启,读新任务
全部14项真实HTTP/File/SQLite oracle 14 failed 14 passed

PASS:195项相关Python回归;另一次相同14项匹配对照通过。原状态、路径脱敏、workspace-directory、HTTP scope和未绑定Chat回退仍通过;权威记录及原文件不变。Ruff、配置内17文件 mypy、完整 control-plane TypeScript typecheck、diff、DCO、双语差分和明确路径公共边界扫描均通过。 标准 premerge 四项 direct、Python compile 和五项 catalog canary 通过,零失败/人工 hold,严格 CQR 有效。

原collector和Todo router的显式CLI诊断override没有改变;这里修的是Chat把已经解析的协调root误传为强制override。读取没有触发模型、任务执行或扣额,不要求用户复制状态、重输Goal或增加确认。多项目混合来源、失效恢复和source重读由原owner负责,无新Python领域决策或平行truth。

新增测试有真实状态/恢复价值。相邻source-route测试保护CLI和manager入口,原Chat HTTP回归补上了调用者此前缺失的链路;没有理由为这个七行修复建立新配置或重写路由。未抓取、轮询或等待GitHub CI,也没有把远端CI状态作为评审缺口。

我的整体评价 / Verdict

现有 collector 与 Todo reader 已有逐 Goal 来源规则;让这个调用者停止传入协调目录的显式覆盖即可,无需复制路由、同步任务或另建配置。

完整切片是现有 Chat 状态与 delivery review 的来源读取,七行生产新增即可交付;原未绑定注册表的本地回退保留。

long_horizon:preserved,原Task、来源、调度与一次结算责任未改;连续来源切换不会新增任务副本。user_experience:improved,原入口恢复正确任务并准确拒绝不可用源,零额外输入或授权轮次。已检查 chat_status_api.py 的状态与任务图入口及完整 diff;没有页面、布局、文案或样式变化,视觉改动评审不适用。 未验证范围:验证边界为源码 HTTP 服务与真实隔离 File/SQLite;已安装 App 的采用、全套 pytest、真实模型和长程净收益未在本轮资格。

修改复用既有typed来源词表和owner,没有新增共享状态或prose分类,bounded refactor判断为无需进一步扩展。批准只适用于当前准确head和上述源码验证,不代表正式App已经采用、全套平台资格或merge权限;合并另按原生readiness及维护者授权办理。

English verdict: APPROVE — the original Chat status and delivery-review callers now preserve each Goal's canonical source route. Matched real HTTP/File/SQLite failures are repaired, source-loss decoys are refused, and the unbound fallback remains covered.

@huangruiteng
huangruiteng merged commit 38e6b45 into main Oct 29, 2026
24 of 40 checks passed
@huangruiteng
huangruiteng deleted the codex/fix-goal-source-status-route-20261028 branch October 29, 2026 03:47
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