Repository navigation
Fix execution guidance in read-only empty conversations - #7357
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 | max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
APPROVE — 只读空会话的有界修复成立。 完整评审 f7e70e6dce725b10a53bec935053b95d56fbe5ec;规格及对照基线 de349ddb4169d4dbe000a2d0b625c0220efdc819。这是源码与打包浏览器资格,安装采用和合并仍有独立门槛。
动机
查看只读研究来源、且该来源没有会话记录的使用者。
原页面没有输入框,却仍要求描述 Goal 或发送纠偏;现在同一页面显示“暂无对话记录”,来源权限和刷新入口继续可见。
真实打包页面的中英空态不再邀请不可执行的操作;普通交互提示、已有消息及读取失败恢复保持原有路径。
本次只完成空会话呈现修复,不证明安装态 App 采用、研究理解、模型效果或完整成本收益,也不授予执行或合并权限。
这里的“只读来源”是原始运行记录的阅读入口,不是新建执行 Goal。留着旧提示会让读者寻找不存在的发送入口;修复这条错误邀请已经是完整、有用、可回滚的结果,无需借本 PR 扩成研究质量或原生 App 安装项目。
改动思路
既有只读来源事实经三个调用点进入同一个 Timeline,已足以修正空态;无需新增权限判断、配置、状态或渲染层。
当前 PR 完成只读空会话的呈现切片;原始记录、错误、恢复和普通执行入口继续由现有 owner 管理。
PersonalWorkspacePage 原本已用来源布尔事实隐藏输入框和写操作,现在把同一事实传给共享 Timeline。只在没有记录时选择中性标题;有内容时不进入该分支。自定义标题继续保留,普通会话的默认提示也继续可见。错误/重试仍由原来源 reader 和 managed conversation owner 提供,不被新空态吞掉。
不改会保留已复现的误导;新配置或另一套 Timeline 会复制已有来源判断。本方案没有这些额外成本,也没有把“可查看”解释成“可执行”。
具体改动
独立规格:docs/development/frontend-delivery.md,固定修订 de349dd,并阅读同修订的 design.md。实现差异之前读取这两份现有契约,未用作者声明替代验收。
- R1 — implemented:只读来源保持原执行边界;三个 Timeline 调用点消费同一来源事实,实际页面没有 composer,也不再邀请发送指令。
- R2 — implemented:真实打包 UI 经隔离 SQLite、原进程与 HTTP reader 读取完整历史及故障/恢复;普通 runtime-readiness 的设置、重查与恢复仍通过。它们没有调用真实模型或改变原始运行状态。
- R3 — implemented:保留原始记录、真实错误、权限后果及结果,移除不可执行的提示;桌面/窄屏、中英以及已有研究展开内容分别核验。
关键代码讲解
ChannelTimeline新增默认false的readOnly参数。只有items.length === 0时读取它:无自定义标题才用中性标题,只读态不渲染描述段落。非空消息、执行卡片与错误流程没有被重写。PersonalWorkspacePage继续从sourceReadOnly或选定来源的sourceAccess.readOnly派生事实,再传给 2902、2914、2930 三处已有调用;没有从文案推断状态,也没有新增权限或配置 owner。timeline.emptyReadOnly在现有翻译表提供中英标题。切换语言只是读已有翻译,普通 Goal 和工作区提示未改。
全 PR 共8条路径,文本 +23/-6:三份生产 TSX、一个已有完整浏览器场景、四张公开前后对照图。测试扩展现有 research-history,增加只读空态和英文重载,保留后续原生结果、报告、引用与故障恢复断言。四图对应真实合成来源,没有新增 CSS、后端或持久化格式;PNG 逐张检查且没有文本元数据。
对主干的风险
重点反例是误伤普通执行、隐藏已有消息或真实错误。相同18组中英 props 在不可变基线和新头运行,6组只读空态按预期改变,另12组完整 HTML 逐字节一致,无语义归一化;自定义标题保留,非空原文完整,readOnly 省略和明确 false 均保持旧表现。真实基线页面有提示但无 composer,当前页面只显示记录状态,证明的是具体缺陷而非实现形状。
当前完整打包 research-history 场景通过(188.026秒),普通 runtime-readiness 也通过,后者保持零发送 Turn。构建/类型检查通过。精确 scope 的标准 premerge 中4项直接、7项 catalog、1项公开边界检查通过;原命令仍 exit 1 / manual_review_required,四个二进制图像 hold 没有被改写为自动绿。我已独立检查四图像素、元数据和来源,这不授予合并权限。
没有新 admission、配额、模型、来源写权限或另一种 actor 协议。局部翻译 key 不是共享状态词表,布尔属性只是已有来源事实的投影。故不要求额外迁移、研究试验或新架构;相关安装/收益仍由已有资格路径负责。本轮未查询、轮询或等待 CI。
我的整体评价
long_horizon:preserved;user_experience:improved。 原始来源、完整记录、错误/恢复和后续阅读保持原 owner;被修正的是只读空态给人的错误执行暗示,不是科学或费用结论。无需更多强制交互轮次,也无需复制现有组件。额外抽象对这个局部条件没有收益,本轮有界重构判断为 unnecessary。
1280×900 和 390×844 的实际打包页面中,空态仅保留一条记录状态;原有来源、刷新与权限说明可见。另检查既有研究结果及展开限制,没有把 DOM 断言当成视觉结论。
未验证已安装原生 App、真实远端来源、模型理解或用户研究;窄屏来源徽标仍受既有宽度裁切,完整只读边界在页尾可读,本 PR 未改该布局。
既有只读来源事实经三个调用点进入同一个 Timeline,已足以修正空态;无需新增权限判断、配置、状态或渲染层。
当前 PR 完成只读空会话的呈现切片;原始记录、错误、恢复和普通执行入口继续由现有 owner 管理。
当前范围没有阻塞发现,结论为 APPROVE。该结论不把作者图像检查、此处打包资格或公开 COMMENTED 意见当成已安装采用、形式批准、原生 readiness 或合并授权;后续 head 改变需重新判断。
English verdict: APPROVE — f7e70e6. The existing readonly source fact reaches all three Timeline callers; empty readers no longer invite unavailable execution. Paired18case bilingual rendering preserves12 ordinary/populated whole outputs; the complete packaged SQLite/HTTP history and ordinary recovery journeys pass. Desktop/narrow pixels and all4 public images were independently inspected. The original premerge image holds and installed/model/merge boundaries remain; CI was not consulted.
Goal And Delivered Outcome
Read-only research sources have no execution composer, but an empty conversation still asked the owner to describe a Goal or send new guidance. Pass the existing read-only state into the shared timeline so its empty view says “暂无对话记录” / “No conversation records”. Normal interactive guidance and recorded conversations retain their existing behavior.
The reproduced defect is the outcome basis. Intended base:
main; source baselineb95223532af1cc3cc6bd9558f96750c79f581e1b. This completes the empty-conversation slice; broader research quality and installed-App adoption remain separate.Author Declaration
ChannelTimeline; empty views offer no unavailable execution guidanceSelf-check: reviewed all three timeline callers, the unchanged populated-content branch, default
readOnly=falsebehavior, source errors and runtime onboarding. Reused the existing timeline/state/localization owners; no new capability, protocol, configuration or rendering layer was needed. The bounded-refactoring pass found no additional useful extraction for this slice.Validation
Tested source tree committed as
f7e70e6dce725b10a53bec935053b95d56fbe5ec; run state: finished. Inputs: public synthetic fixtures and isolated retained read-only checkpoint fixtures. No model or benchmark execution.python scripts/chat_bundle.py buildandverify --sourceresearch-historyruntime-readinessCoverage focuses on the changed empty branch and its source-state propagation. Existing populated results and actual source read errors retain the complete reading regression. No new state/effect authority or backend behavior is introduced. The image holds are not cleared by the author's pixel inspection.
Frontend / Visual Evidence
UI impact: changed. These are packaged browser captures of public synthetic research data. Baseline
b95223532af1cc3cc6bd9558f96750c79f581e1b; proposed UI source is identical tof7e70e6dce725b10a53bec935053b95d56fbe5ec. Static preview only; no shared installation or hosted deployment.Attention/craft review: one neutral empty-record status replaces an impossible instruction. The source/read-only identity, navigation, refresh and permission footer keep their existing places; no new panel, reduced type, styling or motion. Existing custom empty titles remain. Populated research content is unchanged and covered by the full reading regression. Actual runtime absence continues to show its setup/recovery controls on interactive sources.
Type And Boundary