Repository navigation
fix(research): preserve historical reading context - #7359
Conversation
… state 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)
未发现阻塞性问题。评审对象为 6b8aa16ace17a65006720ead26fa895a6e608377;这是阅读连续性的有效增量,尚不代表已安装 App 验收或整站改版完成。
动机
研究者从研究时间线打开旧决策,或重开已保存的结论链接时会遇到此问题。 同一问题有 20 条结论时,点击第 19 条原先会打开第 20 条;修复后读到第 19 条,返回仍保留展开的 9 条列表和原入口焦点。 窄屏打开长结论从标题开始,来源说明收进可聚焦的帮助入口,默认保留简短只读状态。 本 PR 不安装或重启 App,不执行研究或模型,也不声称完成整个研究工作台改版。 已安装 App 的原始 Goal 验收、完整研究页改版及科学收益判断仍由原交付任务继续。
改动思路
复用现有结论选择、来源匹配与帮助组件;用稳定的原生展开容器保留列表,不增加第二份历史或展开缓存。 本次边界是既有研究阅读与来源提示,不扩展模型执行、持久化协议或已安装 App。 历史结论已有稳定身份,原来只是在时间线到阅读器的回调中丢失;直接传递比另建一套缓存更小。全景继续挂载,使原生展开状态和键盘入口保留。来源校验复用已有物理身份匹配,不把字符串变化当作来源变化;未知或不同来源仍清除局部选择。帮助入口保留完整权限解释,不承担执行动作。
下表是同一合成输入通过真实 HTTP/SQLite 的实测差异,基线 56cedb4c886d1fceaddea4113f4a1c56fa934aee 与当前 head 使用同一浏览器探针及相同依赖;不是模拟执行图。
| 操作 | 基线 | 当前 head |
|---|---|---|
| 点击第 19 条 | 读到第 20 条 | 读到第 19 条 |
| 展开 9 条后返回 | 退回 3 条,焦点丢失 | 保留 9 条,回到原入口 |
| 相同来源别名重开 | 清掉书签 | 保留原结论 |
| 390px 打开长文 | 标题在视口上方 | 从标题开始 |
具体改动
关键代码讲解
goal-research-timeline.tsx:201的TrailList从既有事件取result_id,把它和问题 id 一起传递;没有从标题或展示顺序猜身份。goal-research-history.tsx:291的choose/select/closeReader复用既有结论选择、URL、返回焦点。稳定的全景容器保存展开列表;显式选择缺失结论仍显示不可用,问题级入口仍可默认读最新结论。dashboard-page.tsx:3426的commitLoadedStatus复用statusSourceForUrl判断同一声明来源的别名;不同物理来源仍清理选择,原有请求栅栏和恢复路径不变。personal-workspace-page.tsx:2982只调整现有只读页尾:简短状态、共享ContextHelp与原权限说明。中文和英文同时修改;普通会话输入框及已链接来源的分支未增加权限。
规范依据为 docs/development/design.md,固定版本 56cedb4c886d1fceaddea4113f4a1c56fa934aee。逐条映射的评审索引:research-reading-context 对应准确历史结论、重开与返回;research-source-isolation 对应同名 Goal 的物理来源隔离;explanations-on-demand 对应完整说明的悬浮、键盘与点按;populated-page-review 对应长内容、展开项和桌面/窄屏整页检查。以上在本次阅读边界均已实现;完整 App 和更广研究页要求保留原任务,不从截图推断完成。
本 diff 为 7 个产品文件、4 个既有验证场景和 4 张公开合成截图,文本增加 80 行、删除 21 行。复用检索覆盖基线和 head 的选择、来源与帮助调用链。类型变化局限于前端回调,沿用既有 Selection.finding 和事件身份,没有新持久化词汇或并行 Python 决策 owner。
对主干的风险
最重要的反例是把别名保留误做成跨来源保留,以及最新结论测试掩盖旧结论错误。真实打包验证已覆盖同名 Goal 的不同物理来源、读取失败与恢复、显式缺失结论、单条/20 条结论、原文/译文、版本与引用返回、键盘/触屏、刷新及 Back。比较探针两边来源字节均不变、写入尝试均为零;拒绝分析的测试仅故意注入可用信号,真实 fixture 仍拒绝 POST,未调用模型。
类型与 Chat 构建、来源目录、普通交互 runtime、CSS token、双语 diff 和卫生检查通过。预合并 4 个直接及 8 个所选自动检查无失败;4 个 PNG 的手工隐私/视觉留置已逐张核对精确提交像素、合成来源和 PNG 元数据,无私人内容或文本/EXIF 元数据。自动扫描不能据此声称检查过图像。额外的全工作区健康加 PNG 文本输入诊断仍非通过:包含本 diff 之外的 authority 诊断及不受支持的二进制文本输入,没有计为本次通过项,也未放宽规则。探针早期的命名空间等待条件与语言选择器设置错误单独保留,修正后同一基线/head 探针完整运行;不冒称产品故障修复。依当前策略不查询、轮询或等待 CI。回滚只需撤销这一个前端提交,无状态迁移。
我的整体评价
长程维度判断为 preserved:原始研究记录、负结果及版本仍完整可读,修复的是后续重开与取阅连续性,不据此声称实验收益、采用或完整成本改善。用户体验判断为 improved,限于本次实际核验的阅读流程:一次打开正确结论,返回无需重新查找和展开,未增加用户陈述、确认或准备轮次。已检查长标题、重复正文、反驳与待检查状态的完整研究页;默认只读说明不再占一整段,选中正文优先,展开后的来源和完整原文仍可读。 未核验已安装 App、私人原始 Goal 或原生 WebView;窄屏来源芯片的既有截断仍在,不将本次阅读修复当作整站视觉完成。
复用现有结论选择、来源匹配与帮助组件;用稳定的原生展开容器保留列表,不增加第二份历史或展开缓存。 本次边界是既有研究阅读与来源提示,不扩展模型执行、持久化协议或已安装 App。 规模和维护成本与可复现问题相称;稳定原生容器已完成同域简化,未增加自定义缓存或新框架。四张 PR 截图及桌面/390px 下方来源与完整原文的展开视图均已检查。可批准此精确版本;评审不授予合并或安装权,仍须当前 change-quality 资格及精确 head 的 merge-readiness。相关 saved-report、标签和空 Chat 提示各自保留原边界,不以无文本冲突宣称后续集成通过。
English verdict: APPROVE — 6b8aa16ace17a65006720ead26fa895a6e608377. Exact historical findings, saved reading context and narrow heading visibility are verified through identical immutable-base/head packaged UI with real isolated HTTP/SQLite. Source separation and zero-write behavior remain intact. Synthetic visuals reviewed; installed App and broader research acceptance remain unqualified. CI was not consulted; merge qualification is separate.
Clicking an older decision could open the question's latest finding. Research now carries the selected finding identity into the existing reader and URL. Closing preserves the expanded decision collection and exact keyboard return; opening a long finding starts at its heading on narrow screens.
The existing source catalog also distinguishes an alias of the same reader from a different physical source: address normalization retains bookmarks, while a real source switch still clears source-local selections. The shared read-only footer keeps one visible state and moves its explanation into the existing hover/focus/tap help.
Validation and limits
Source
6b8aa16ace17a65006720ead26fa895a6e608377, based onmainat56cedb4c886d1fceaddea4113f4a1c56fa934aee. Existing finding/selection/source owners are reused; no new persisted schema, scientific metric, execution grant or source mutation. Installed App adoption and the broader research workbench remain unqualified. Related saved-report entry (#7337), finding labels (#7343) and read-only empty-chat guidance (#7357) keep their separate scopes.Visual evidence
Public synthetic data only, packaged browser and real isolated HTTP/SQLite owner. Captures use the proposed UI before the metadata-only rebase; its UI and PNG blobs are unchanged at the source above. The before image records the wrong-finding counterexample during repair, before precise finding dispatch was added. This is source/package evidence, not an installed-user capture. No hosted preview.
Observed composition: the selected title and full reading text lead, original questions and citations remain available, and negative/unknown states are retained. The footer no longer repeats a default explanatory paragraph. Existing narrow source-chip truncation is unchanged. This does not certify scientific validity or complete the whole frontend overhaul.