Repository navigation
fix(research): declare captured previews as read-only - #7312
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: model_agent | gpt-6.1-sol | OpenAI | runtime_reported | reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机
读取已捕获研究结果的人打开预览首页时,会被缺少 Agent 运行环境的安装提示和无法执行的输入框干扰。
此前捕获预览被显示为“本机交互”,还列出 fixture 的不可执行命令;现在同一已打包界面识别 Research preview 为只读来源,直接保留 Goal、研究记录和原文入口,去掉运行环境安装提示与执行输入框。
已通过真实捕获 HTTP/SQLite、完整 packaged 场景和桌面/窄屏实看验证只读身份及阅读路径;POST、PUT、DELETE 仍被 405 拒绝,原始捕获来源未改变。
本次只修复捕获研究预览及其回归场景,不新增执行服务、修改普通工作区的安装引导,也不代表已安装 App、真实模型或完整研究科学效果验收。
改动思路
最有力的反对理由是:为一个示例修改共享权限或增加前端特判,成本会大于问题本身。当前改动没有这样扩展。捕获预览已经拒绝写入,问题在于它仍把自己投影成本机交互来源;在既有 HTTP 所有者补齐已有来源目录,让前端读同一事实,是更小且可回滚的修复。浏览器继续使用已有 StatusSourceCatalog 和 activeSource.readOnly,不需要第二份手动同步的权限状态。
目录轻读不能携带来源身份时返回 404,触发既有完整状态回退。完整响应只在成功的状态读取上声明相同 loopback 来源,并保留 goal_id;未知 Goal 的错误仍由原来源读取器展示。回退增加读取成本,作者没有把它包装成优化。读取已保存的研究无需安装运行环境、重填已知信息或再做确认;执行权限仍由 HTTP 写入拒绝独立保证。
具体改动
接受依据 docs/development/design.md,固定版本 61b83ac745a49f9eafadd7b87b085d567a9dca11;并核对同版本 goal-workspace-surface-v0.md 的 shared Goal source reading checkpoint。逐项映射:
- Earn The User's Attention:implemented。捕获预览首页直接显示只读来源和 Goal,移除不相关的运行环境安装任务;同一 packaged UI 的基线服务器仍显示本机交互、安装墙和输入框,当前服务器消除了这组错误提示。
- Research Workspace / 研究工作台:implemented。原生测量、首次值、未知保留结果和引用原文继续可读;20 条长结论、24 条混合状态记录的负结果、受阻来源及全部记录在展开和窄屏下仍可访问。只读展示没有成为执行授权。
- Explanations On Demand:implemented。来源、测量限制、历史与完整记录仍按需展开;缺失 Goal 404 可见,返回有效来源后恢复阅读,不以缓存数据假装成功。
关键代码讲解
Handler._send_json仅对成功的/status.json且含run_history的响应添加现有read_only_sources,保留其他 API 字段,URL 的goal_id经标准编码。它陈述这个捕获读取器的性质,不是新权限引擎。Handler.do_GET对目录轻读返回已有兼容回退信号;其余原生研究、状态、原文 API 仍走原处理器。do_POST/do_PUT/do_DELETE的 405 独立边界保留。runtimeStatusSourceCatalog是未改动的共享消费者:核对 loopback URL 是否匹配当前来源,将其投影为 runtime/readOnly;researchHistoryScenario则在原来的真实 native 开场用首页、Goal 范围、窄屏及三种写入方法保护这条组合路径。
文字改动在两个已有示例文件中为 +44/-2,并提供四张公开合成截图。已检查四张实际像素和 PNG 元数据:仅 ICC 色彩配置,没有私有路径、真实会话或账号信息。现有截图直接展示桌面结果与窄屏结果;它们的边界是 captured packaged preview。
对主干的风险
没有发现阻塞问题。 最强风险是首页标签修好了,Goal 范围读取却丢掉身份,或隐藏输入框被误当成权限保护。独立真实 HTTP 对照确认:基线目录 200 但无来源目录;当前目录 404 后完整状态携带匹配来源,Goal 查询保留范围;未知 Goal 仍 404。原生场景实际发送 POST、PUT、DELETE 均为 405,mutation_attempts=3 且 source_unchanged=true。同一 packaged UI 的基线/当前服务器对照复现并消除了原缺陷,没有用 mocked 最终状态供应待证明结论。
新构建 Chat bundle 通过;完整 research-history packaged 场景通过(144070ms),普通 runtime-readiness 安装/重新检查对照通过(934ms)。完整场景后半仍包含既有合成展示/竞态注入,不能把它当真实模型效果;原生 HTTP、SQLite 和原文开场单独可辨。原生 premerge 为 5 direct + 6 selected 通过、0 failed,结果仍是 manual_review_required,4 个图片人工标记。本评审已检查其像素/元数据,但没有把自动返回改写为绿色,也没有查询或等待远端 CI。
新增断言进入既有 native 场景,补的是普通来源开关测试未覆盖的“捕获后端 + directory hydration”组合回归;没有新增同形 smoke 或测试框架。未发现同作者队列中的重复批量测试问题。现有产品目录与权限所有者复用,未引入新的共享词表、配置或持久化字段。
我的整体评价
APPROVE,固定头 bbf1dd0dad3c4ae9c63d9cac1421af816ccefe8c;以 COMMENTED 记录批准结论。 当前登录账号与 PR 作者相同,GitHub 不允许正式自批准;这不表示发起任务的 Agent 与评审 Agent 相同,更不授予合并权。用户体验 improved、长程读取与续用 preserved:修复的是不必要的安装/执行暗示,研究结果、负结果、未知、完整证据、来源恢复及写入拒绝都保留。
在 1280×900 和 390×844 的实际预览中,只读来源替代了错误的本机安装任务;研究数据、完整原文与来源详情仍可读。另实看了 24 条混合状态记录和 20 条长结论,正文、负结果、未知与下部受阻记录仍可达。
视觉范围为本次 packaged 捕获预览;未覆盖已安装 App、真实远端 SSH 与真实模型产物,未据此作出这些交付结论。
这是一项已有捕获读取器上的完整窄修复,无需扩展共享目录协议或另造阶段。接受完整状态回退的额外 IO;不据此宣称延迟改善、已安装产品交付、真实模型采用或科学收益。人工标记、独立 merge-readiness 与维护者合并权限仍需分别处理。
English verdict: APPROVE at bbf1dd0dad3c4ae9c63d9cac1421af816ccefe8c (COMMENTED author-account fallback). The actual captured reader now advertises its existing read-only nature through the shared catalog and supported full-status fallback. Packaged/native research reading, ordinary missing-runtime control, desktop/narrow expanded views, scope recovery and HTTP405 write fences passed. Native premerge retains four manual image-review holds; no installed/live-model qualification or merge authorization is implied.
Captured research-history readers deny execution writes, but previously identified themselves as the ordinary local workspace. Opening the steward home therefore showed a missing-runtime installation warning with fixture command paths and offered an unusable composer.
The fixture now advertises the existing read-only source catalog with its Goal scope and uses the supported full-status fallback when directory hydration cannot carry that identity. Existing frontend behavior identifies the preview and removes execution affordances; POST/PUT/DELETE still return 405. Ordinary missing-runtime onboarding is unchanged.
Validation at
bbf1dd0dad3c4ae9c63d9cac1421af816ccefe8c: exact-head packaged build/typecheck and the complete packagedresearch-historyscenario passed (144.835s), including native results, saved reports, citations, previous versions, recovery, home/Goal read-only identity, and POST/PUT/DELETE rejection.runtime-readinesspassed on the unchanged proposed source tree (0.946s), preserving ordinary setup/recheck behavior. The settled target-main baseline fails the new source assertion, reporting “本机 / 本机交互”. Premerge completed all 5 direct and 6 selected checks with zero failures; its gate remainsmanual_review_requiredfor the four image evidence files. The first premerge attempt failed because repository-root TypeScript dependencies were absent; after the prescribed rootnpm ci --ignore-scripts, the semantic-vocabulary check and complete premerge rerun passed their automated checks. Independent visual review remains outstanding.No new protocol or capability: the fixture consumes the existing StatusSourceCatalog owner. The full-status fallback can read more than metadata-only discovery; no latency improvement is claimed. This is a source-packaged captured-reader correction, with shared App installation and independent visual review separate.
Visual evidence uses public synthetic research data, a harmless missing-command placeholder, and the same packaged UI source (
61b83ac); the provider changes from target-main behavior to this proposal. Desktop 1280×900 and narrow 390×844 retain readable layout and show no horizontal overflow. The preview identity, warning withdrawal and removed composer are visible; captured execution coverage remains unknown.