Repository navigation
fix(dashboard): 研究阅读器支持同组切换并保留阅读位置 - #7534
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)
Exact head: 0abf710; base: 98c4ba3.
动机
在研究历程中比较同组问题与多条finding、刷新后继续阅读的用户。 从同日24问题集合打开第5个问题并选定finding,旧base刷新后只剩回到全图;新head保留问题、finding和原集合,返回后焦点回到第5个问题。 用户能在同组问题间前后切换、直接选择并查看完整原问题,刷新或浏览器往返保留精确finding与返回路径,无需重找集合或重复输入。 不翻译或改写原证据,不改变原生指标、来源权限、研究状态、模型调用或调度;不以页面可用认证科学收益或正式安装采用。
剩余缺口:正式桌面App未安装验收;合成HTTP/SQLite和真实浏览器验证不能证明独立读者理解或科学收益。未启动分析模型、未查询CI、未执行合并。
验收依据是变更前设计 design.md,source revision 98c4ba315d98c7e79b16f1ae184c5dd120d54a20:research-reading-persistence、complete-original-readable、source-authority-preserved。分别要求精确阅读位置/返回、长原文可读和原始状态/来源保真,不以作者新加条款自行证明完成。
改动思路
同组导航复用现有Selection、URL history和原始Explore记录;集合只是当前Goal内经成员校验的阅读位置,不成为研究事实或执行权限owner。 本PR交付可刷新、可返回的同组阅读旅程;正式桌面App安装、真实模型分析、独立理解收益与全站阅读质量仍由原产品工作验收。 URL新增parent只保留阅读意图;恢复时仍由当前Goal节点集合核验合法成员。Question选择与Finding选择分层,不复制研究记录或增加设置,也没有额外确认或重新输入。
对主干的风险
最强反例是伪造parent或刷新后关联错题。本次检查了错Goal、不含节点的parent、集合首尾、缺finding、HTTP失败恢复、Back/Forward和精确返回焦点。完整源码构建通过;真实SQLite/HTTP的packaged research-route-reading场景18.058秒、完整research-history场景241.867秒通过。浏览/切语言不启动模型,最终fixture readback为15次历史读取、0次mutation attempt、来源SHA未变。首两次smoke因隔离HOME找不到既有浏览器依赖失败,显式指定现有依赖后同断言通过;未放宽测试或deadline。
实际immutable base 98c4ba315d98c7e79b16f1ae184c5dd120d54a20 与head使用相同86条记录:base第5题finding2刷新后仍保留finding,却丢失返回问题集合;head保留Question5/24、同finding及parent,返回后焦点准确回到第5题按钮。作者description的8张公开合成图已独立看过像素;另外亲自在Ego检查1440桌面、390窄屏、完整问题帮助和来源/历史展开,前后对照不依赖作者测试结论。
标准premerge的4个direct和13个selected自动检查全部通过;native gate仍返回8个二进制视觉人工hold。本评审逐张核验8图像素、合成来源和metadata,但没有把gate的ok=false改写为green或merge-ready。一次误用不存在的Python模块入口也单列保留,随后运行正确source-checkout console入口。CI未查询。
具体改动
布局同步保留了原来源与历史入口;窄屏让问题选择单独占行,前后按钮保持可点按尺寸,不用缩小正文来容纳长标题。测试扩展原有两条整页旅程,覆盖刷新、首尾、错误parent和返回焦点,没有另建生产导航服务。
- selectedFromUrl:21:解析当前Goal及阅读parent,旧node/finding URL仍可用;参数本身不证明成员关系。
- collectionMembers:253:用真实已读成员核对当前节点,错parent不激活同组导航。
- chooseQuestion:336:切题保留集合,选择该题finding;与原popstate和返回焦点组合,DOM ref不成为持久选择owner。
我的整体评价
APPROVE,无已验证的本次引入阻塞发现。同组导航复用现有Selection、URL history和原始Explore记录;集合只是当前Goal内经成员校验的阅读位置,不成为研究事实或执行权限owner。 本PR交付可刷新、可返回的同组阅读旅程;正式桌面App安装、真实模型分析、独立理解收益与全站阅读质量仍由原产品工作验收。
实际观察86条合成记录、24个同日长问题及每题两条正负/暂定finding的整页:Question与Finding分开,正文16px,原问题帮助按需展开;390px问题选择独占一行,失败与未知正文仍可读,来源/历史和全部记录继续可达。
未验证范围:正式桌面App未安装验收;合成HTTP/SQLite和真实浏览器验证不能证明独立读者理解或科学收益。未启动分析模型、未查询CI、未执行合并。 我区分了自动无溢出/数据检查与实际像素观察:改善体现在同组题目更容易找到、完整问题按需阅读,来源、历史、负结果和未知仍可访问;未从截图推断读者理解收益。此次有界简化已经移除仅内存readerParent依赖;继续拆出导航框架没有当前必要。
English verdict: APPROVE — 0abf710; same-group navigation and reload retain the exact question, finding and return context; installed-App adoption and reader comprehension remain unverified.
从日期或相邻点的问题列表打开一条结论后,旧页面只能反复返回列表切换问题;刷新又会丢掉列表上下文,返回按钮变成“回到全图”。
现在可在阅读器内直接切换同组问题,问题与结论分别标明。刷新和前进后退保留分组、问题与准确结论;返回列表聚焦当前问题,再返回全图恢复原日期或点组入口。完整问题放在选择器旁的按需帮助,手机选择器独占一行,正文保持 16px。相同约束已写入设计规范。
只调整现有研究阅读器及回归场景,沿用历史投影、URL 编码和 ContextHelp。默认研究全景、来源事实、关系与分析执行权限保持原有边界;分组只是阅读范围。
验证
npm run build --prefix apps/presentation/dashboard:TypeScript、Dashboard、打包 Chat 通过。research-route-reading:28.085 秒通过。真实 HTTP/SQLite、86 条合成记录/24 个同日问题,中英文 1440/390、精确结论刷新、前后问题、Back/Forward、首末禁用、键盘焦点、全文帮助、错误父组隔离及零写入。既有七种分析入口状态/三种宽度也通过。research-history:250.417 秒通过,覆盖原有分组、记录、来源与失败恢复路径。中间迭代中发现的重复 React key 与按需帮助断言均已修正,最终结果单独记录。a85a804aa在同一合成夹具的四种语言/宽度组合均复现刷新丢列表;另在已有公开 Graph 历史的 134 条记录、首日 36 个问题中确认真实断点。cqr_cb738bbcf792c290b3a2有效;4 直接检查、4 catalog、8 选中 smoke 和 1 公共边界检查通过。标准 premerge 仍返回 8 张图片人工评审留置:作者已逐张查看像素及元数据,尚不是独立评审或 merge-ready。验收范围为源码打包与隔离真实后端;尚未在正式安装 App 验收,也未执行分析模型、benchmark、安装或合并。
整页视觉证据
修后版本
0abf7107ec0e72ec7a0483c0c4b103a58165dd30;修前版本a85a804aa93ec937cc5fdd715fd8e746ed8b4770。同一公开安全合成夹具,86 条记录,原文保持中文;中英指界面控件语言。图片是实际打包页面的完整 1440×900 / 390×900 视口,均已逐张检查。选择的是同一问题、同一旧结论刷新后的状态。