Repository navigation
fix(chat): read full Task requirements from the registered Goal source - #7649
Conversation
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: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; runtime_reported; reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
当前精确 head c82f4f6a0c5fc641cc43f18b6286a734380c3dce 的有界修复未发现阻塞问题。以下是作者自审,不构成独立评审或合并授权;结论依据本地真实入口验证,未用远端 CI 代替证据。
动机 / Motivation
使用独立聊天历史目录、从 Goal 页面打开任务要求的用户。打开任务时,旧版会报错或显示同名的另一份要求;修复后显示注册来源的完整正文,来源失效时显示失败并允许恢复后重试。真实 File/SQLite HTTP 路径读回完整当前和归档要求,切换来源后立即更新,错误来源不会借用聊天目录。
本次不改变分页预算、控制器决策、CLI 显式 override、安装或原生 App 资格。安装版本采用及原有完整恢复目标仍未完成。
改动思路 / Approach
复用现有来源适配和唯一 canonical reader,消除一个错误的显式 override;不增加状态、配置或来源判定。本 PR 只交付现有 Chat Task 详情的注册来源读取与失败恢复;安装、原生 App 采用和上层恢复验收仍由原任务继续。不修改 canonical 来源选择器,而是撤掉 Task 调用处错误的聊天目录显式参数。单独内联判断会复制已有规则;新建 provider 或迁移决策代码都超过这个问题的需要。
用户仍从原任务入口打开详情,无需填写运行目录、复制命令或增加确认轮次。正常读取为一次导航,来源恢复后的重试是一次恢复操作。分别链接的外部来源仍由既有 namespace 检查和只读 reader 截获;本地来源才进入此适配。这两个入口的职责没有合并成第二套权威。
具体改动 / Changes
规范依据:docs/development/frontend-delivery.md,spec_revision=bcb1a8710844bda6b84c2a00cf5d86ba78e126d9。先读该版的 shared source reader、Native App source Goals 与 Task-first delivery;本 PR 未改写规范。以下标签对应原文未编号条款:
source-reader-ownership:implemented。读取仍交给原来源与 canonical Todo owner;适配器不获得决策或写权限。由真实 File/SQLite 来源、同名 decoy 和前后权威快照验证。task-first-readback:implemented。已有打包 Task 详情读完整正文,来源失败有明确提示与重试,682 字末尾验收条款可达。installed-app-qualification:deferred。源码/打包浏览器与已安装原生 App 分开;原恢复工作继续负责安装版本采用和实际任务回读。本提案没有把浏览器证据提升为原生资格。
关键代码讲解
goal_read_runtime_root的函数体与基线完全相同:registry 具有 common runtime 时不塞入显式 override,让现有来源路由解析每个 Goal;未绑定时保留原协调目录和后备逻辑。原两个状态消费者同步改名,仓库未找到漏改的旧私有符号使用者。TodoDetailRequestMixin._todo_detail只替换一个来源参数。loopback、Origin、Goal 成员、单一 Task、登记快照、完整正文和原 CAS 读基准都保留;缺失来源不会返回另一份有效任务。list_goal_todos是未改动的共同 reader,继续负责完整精确读取及 source snapshot。CLI 显式 override 的诊断用途没有被此 HTTP 修复改变。
完整 diff 为 97 行增加、4 行删除,其中生产代码 +5/-4、回归 +92。重构已在同域边界完成:复用已有适配器,不增加模块、配置、持久化字段、公共协议或新的闭集词汇。
对主干的风险 / Risks
最强反例是:聊天目录恰有相同 Goal/Task ID,原来源随后失效或被替换,HTTP 仍成功却返回错误正文。基线 bcb1a8710844bda6b84c2a00cf5d86ba78e126d9 上同一新增回归的四种 File/SQLite × 项目/全局 registry 全部因错误正文失败;当前 head 通过,并覆盖归档要求、登记改绑、来源缺失/不可读/错误 Goal、恢复重试及 canonical 内容和 revision 不变。
本次还检查了未在 diff 内的 linked-source 拦截和本地 fallback,额外执行既有 test_original_task_detail_cannot_follow_a_replaced_source,PASS,1 passed / 3.57s:旧 namespace 在移除/替换后仍被拒绝,新 namespace 才读取自己的正文。这是独立既有反例的执行,未新增空壳测试或使用活动 Goal 作样例。
本地验证:原三个文件的 34 passed / 41.30s、Ruff、17-file mypy、打包 Chat 构建和 premerge 6 direct + 8 executed canaries 均 PASS;后者包含完整 semantic drift、maintainability、quota/work-lane/monitor/Todo/projection 检查。复用的每项均绑定同一 c82f4f6a0c5fc641cc43f18b6286a734380c3dce;本次确认源码与依赖未变,所取新 main 在相关 owner、调用点和锁文件无变化。首次缺少 root TypeScript dev dependency 的失败保留;正常 npm ci --ignore-scripts 后相同完整选择通过,未删断言、缩扫描或改预算。Vite 大 chunk 警告保留。后续主干集成仍须独立重新资格化。
本次没有 opt-in/default-off 声明,没有新强制工作条件、字符串状态分类或域专用义务。原 Origin、成员及 namespace 拒绝分支保持。实际 SQLite/File 和隔离 HTTP 证明的是读取边界;不声称 PostgreSQL 权威改造、生产迁移或实际模型采用。
我的整体评价 / Verdict
justified_increment:该修复让原有完整要求重新可读,并保留失败恢复,适合独立审阅和回滚。long_horizon 为 improved,限后续读回/重试保留原来源与完整承诺,不声称已测得 Agent 效果提升;user_experience 为 improved,不增加已知意图之外的人工步骤。复看同一 c82f4 构建的桌面完整正文、390px 正文末尾和来源失效页面;正文先于任务元数据,长文可读,失败提示和重试可见。当前未修改前端或构建依赖,原截图的适用条件保留。 本改动没有折叠、密度或展开布局变化;所查正文面板是任务读取的默认状态,窄屏证据检查同一旅程。已安装原生 App 的 WebView 采用和原有实际任务的端到端恢复尚未验证。
observable semantics 是有意且已验证的来源修正,原共享适配函数体、CLI 显式 override、响应和错误文本保留。复用现有 owner、机制规模与问题相称,未发现必须再加状态或新框架的理由。无阻塞发现;最强未完成验证是安装版本的原生 App 采用与原恢复目标。后续需要各自的独立评审、有效 readiness 和维护者授权,本次不合并、不安装。
English verdict: APPROVE at c82f4f6a0c5fc641cc43f18b6286a734380c3dce — no blocking finding in the bounded Task source repair; real File/SQLite HTTP/CLI, packaged recovery, and linked-source replacement evidence pass. Author self-review only; installed adoption and merge authority remain separate.
Chat 使用独立历史目录时,Goal 状态仍可正常读取,但任务详情会返回 400;如果聊天目录恰好含相同 Goal/Task ID,还会返回另一份正文。任务详情现在复用状态页和交付检查已有的 Goal 来源路由,打开任务时读取注册来源的完整要求。
改动只涉及两个 HTTP 适配文件和一个回归测试文件。将已有 helper 命名为
goal_read_runtime_root,供三个实际消费者共用;保留其原实现,继续由现有 canonical source owner 决定来源。CLI 显式 runtime override 的诊断语义保留。验证绑定
c82f4f6a0c5fc641cc43f18b6286a734380c3dce,基线为bcb1a8710844bda6b84c2a00cf5d86ba78e126d9:git diff --check通过。npm run build:chat --prefix apps/presentation/dashboard完成 TypeScript 检查与当前 packaged bundle 验证。Vite 报告大 chunk 警告。npm ci --ignore-scripts后完整门通过。cqr_754bc4f5ad0742fbceba已记录并 verify=valid,fingerprint754bc4f5ad0742fbceba6065f5d48d66b8a0b43a8d944e3862995e09b46e2501。有界重构已应用于同一个 HTTP 来源适配边界;未增加配置、协议字段或第二套来源判定。此 PR 为完成的作者提案;CI、当前 head 的评审、merge readiness 和维护者合并授权仍各自适用。