Show only verifiable outputs in Goal Files - #4973
huangruiteng merged 6 commits into
Conversation
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
huangruiteng
left a comment
There was a problem hiding this comment.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Exact head: 4728c08f634952bf7e4d74bb46cd301fcd0fefb7; reviewed against its current stacked base b89525577c47beed971e86365e84c72f16811062 (#4972).
动机
Goal Files 原先把最近运行、验证摘要和事件计数包装成“文件”,甚至可能带上无关的开放 Todo,使执行观察看似已交付成果。本 PR 的可独立验收结果是:这些状态仍可在 Tasks 查看,但不再冒充 Files;原 Goal Chat 会话中当前已验收的团队报告可在 Files 读回。非 Chat 托管 Goal 的版本化成果投影仍不在此次交付范围内。
改动思路
dashboard-page.tsx 删去状态到 output 的合成映射,保留 hasRunObservation 供任务时间线使用;已经发布的周期报告仍是 File。Files 仅在可用的 Codex Goal Chat 原会话内读取 fetchLoopXMode,随后复用现有 GoalTeamResults;后端仍决定验收、operation/ref/hash 和恢复状态。读取失败会卸载旧报告并显示重试。当前堆叠基底 #4972 提供三页自动、至多十页手动的有界发现;本 PR 不另建分页或验收 authority。
具体改动
删除旧 runEvidenceCopy、伪 File 模型与相应旧断言;加入中英文空态/失败文案、RFC 边界说明,以及 packaged 浏览器的正反场景。构建后的 chat bundle 与 asset-retention 一致。
关键代码讲解
buildPersonalHomeModel只记录是否存在运行观察,不再从验证或事件摘要构造交付物。PersonalGoalHome仍生成 run/Task 行,但不再附加 synthetic output;Files 只保留真实发布报告。GoalOutputsView以当前 Files tab、原会话和 Codex 代理为读回门槛;模式读取失败清空旧 reader,Retry 重新核验。
对主干的风险
错误路径的主要风险是把运行状态或旧的已验收报告继续展示为当前成果:本 head 分别删除状态映射,并在会话模式读取失败时卸载 reader。原有 periodic report 路径不变;无有效会话、只读或非 Codex Goal 不触发团队读取。团队报告的单项验收不等于 requester adoption 或整个 Goal 完成。#4973 堆叠于仍开放的 #4972,#4972 又堆叠于 #4960,合并时必须按依赖顺序处理基底与生成资产;这里没有把基底功能说成已进 main。
独立精确 head 验证:npm run smoke:personal-workspace-packaged 九个场景全过;npm run build:chat(含 TypeScript)、npm run smoke:projection-localization、base-to-head git diff --check 均通过,构建后跟踪树干净;桌面及 390px 移动截图已检查。浏览器 API 使用合成夹具,未在此重放 live backend acceptance;按 Goal 的 wait_for_ci=false 未轮询远端 CI。
我的整体评价
APPROVE。这是把“运行观察”和“可核验交付”重新分界的完整 UI 修复,并复用既有后端读回契约,未引入第二结果源。相邻的前瞻性收敛已经体现在删除伪输出模型;再拆出新抽象没有收益。剩余非 Chat 成果投影与堆叠基底合并属于后续边界。本结论只对上述 exact head 有效,控制面/产品改动不由作者自行合并。
English verdict: APPROVE — exact head 4728c08f634952bf7e4d74bb46cd301fcd0fefb7; status-only Goals no longer fabricate Files, and an accepted Goal Chat report is read from its original session. Nine packaged browser scenarios, the TypeScript chat build, localization, and diff hygiene passed. #4972/#4960 remain open stacked dependencies; maintainer merge required.
huangruiteng
left a comment
There was a problem hiding this comment.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Exact head: 4728c08f634952bf7e4d74bb46cd301fcd0fefb7; stacked base: b89525577c47beed971e86365e84c72f16811062 (#4972).
动机
Goal 的运行、验证或事件记录曾被包装成“成果”文件,并可能挂上一个无关的开放 Todo。这让用户以为已有交付物。与此同时,原会话里真正通过验收的 Goal Chat 团队报告在 Files 中找不到。本 PR 让 Files 只呈现有可核验来源的报告,同时保留运行观察在任务中;托管非 Chat 运行的成果身份仍需另行实现。
改动思路
删除从最新运行状态合成 File 的规则,继续使用既有的已发布阶段报告投影。在当前 Goal 的 Codex 会话确实配置了团队模式时,Files 复用原会话的 GoalTeamResults,由委派读取 owner 检查当前验收及产物摘要。切换页面或模式查询失败会清空旧的团队报告,错误状态提供重试。没有新增结果 writer、权限或持久化字段。
具体改动
dashboard-page.tsx 删除 personalRunEvidence、伪造的 output timeline 行及其未关联的 Todo,保留 hasRunObservation 让任务区仍呈现执行观察。projection-localization.ts、中英文文案和对应 smoke 一并移除已无调用者的“最近运行即成果”文案。personal-workspace-page.tsx 在 Files 内基于当前会话的模式回读显示已验收团队报告,并对加载、失败、重试和页面切换作失效处理。浏览器场景覆盖真实打包 Chat 页面中的报告复用、状态无文件、失败清空、重试及桌面/390px 布局;RFC 说明了托管非 Chat 成果仍缺的生产者合同。资源保留清单与两份构建产物随源码更新。
关键代码讲解
buildPersonalHomeModel(dashboard-page.tsx第 1217 行)只派生“有运行观察”这个任务事实,不再派生文件。PersonalGoalHome(同文件第 2575 行)保留运行行与真实阶段报告,删除状态转 File 的映射。GoalOutputsView(personal-workspace-page.tsx第 185 行)在同一会话配置成立后复用既有成果 reader;失败时清除旧内容并让用户重试。
对主干的风险
用户打开一个只有运行状态、没有交付报告的 Goal 时,Files 会比以前更空。这是刻意的事实修正,任务区保留执行入口,空态直接指向任务。若当前会话模式回读失败,Files 会显示错误而不继续展示旧报告。最强反例用相同的新浏览器脚本在 base 和精确 head 上运行:base 的 Files 找不到团队报告并超时;head 约 10 秒通过。另一打包浏览器场景确认中英文状态型 Goal 不再出现伪文件;TypeScript 检查通过。桌面和窄屏截图表明报告可读、没有横向溢出。浏览器 API 响应为合成数据,因此这些检查不宣称托管非 Chat 运行已有成果,也不证明生产环境高并发的跨页快照。
我的整体评价
APPROVE。删除虚假的结果映射比重命名它更合适;现有阶段报告和原请求方委派读取各自保留了权威边界。前瞻性收敛也落实为删除不用的本地化/投影代码,没有引入第二套成果状态。下一步需要在 canonical Todo 完成与验收边界绑定托管产出的句柄和摘要,再验证 CLI 与 Files 的同一精确读回;本 PR 不提前把运行记录称为文件。
English verdict: APPROVE - exact head 4728c08f634952bf7e4d74bb46cd301fcd0fefb7; Files no longer promotes run observations into deliverables and reuses the original session's accepted team-result reader. Packaged positive/negative browser checks and TypeScript passed; managed non-Chat output remains an explicit dependency.
3886e99
into
codex/product-research-journey-20260924
Problem and result
Goal Files could present a latest-run status as a delivered file and attach an unrelated open Todo to it. A status-only Goal now shows no delivered Files; its execution state stays in Tasks. For a Goal Chat team, Files opens the original conversation's accepted report reader, including source and current acceptance checks. Failed readback clears the earlier report and offers Retry.
This does not claim that a managed, non-Chat run has delivered a versioned report. That still needs a public-safe result projection with its own source and acceptance readback.
Dependency and validation
Stacked on #4972 (later-page accepted report discovery), which is stacked on #4960 (qualified Node/SQLite runtime). The combined packaged Goal Chat bundle passed TypeScript/build and all nine personal-workspace browser scenarios. The
team-evidencescenario proves a later-page accepted report appears in both original Chat and Goal Files, status-only runs do not become Files, failed readback clears stale content, Retry restores it, and desktop/mobile layouts remain usable. Projection localization and PWA asset retention smokes passed;git diff --checkpassed.Exact stacked diff: 12 paths, 132 insertions and 201 deletions. Change-quality receipt
cqr_c19a32667ffca6d317d4is valid; premerge passed three direct and 16 selected checks, zero failures or manual holds. The packaged frontend changed; Lark and CLI retain their current status and artifact contracts. No runtime behavior is self-merged; this PR awaits maintainer review.The related simplification removed the synthetic run-to-File mapping and unused localization helper. The combined browser test moved its initial pagination assertion before Files navigation, so subsequent readbacks do not invalidate the intended two-request observation.