Repository navigation
Make the UTC basis explicit in research date groups - #8332
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)
动机 / Motivation
在嵌套 case Goal 中按日期阅读研究记录的用户。同一问题首次记录在 2026-01-04 23:00 UTC,北京时间已是次日;原日期按钮和组标题只写 2026-01-04,容易与本地记录范围混淆。修复后两处显示 2026-01-04 UTC,问题仍在原组。
时间线日期入口和组内阅读器直接标明 UTC,保留原来的日期键、24 个成员与刷新后的选择。本次不转换原记录时区、不推断求解时长、不执行模型分析,也不改测量或收益判断。case 分析质量、跨实验可比性和完整成本仍需各 case 的独立证据,本 PR 不宣称解决这些问题。这解释了为什么继续沿用现状仍有阅读成本,也限定了这次修复的实际价值;不能把日期显示改善当作研究效果已经提高。
改动思路 / Approach
两处既有投影补充相同的时间基准即可消除歧义;日期归组继续由同一 typed owner 决定,无新增状态、配置或执行入口。当前 PR 交付时间线入口与日期组阅读器的 UTC 口径,以及同一真实本地历史读取路径的跨午夜回归。研究入口沿用现有工作台,源事件先经过唯一的 UTC 日期归组,再交给时间线或关系图显示。原 Graph 的文字已标明 UTC,本次使另两处呈现与它一致。点击日期、选择问题、刷新、返回只改变阅读选择,不增加分析任务、来源写入或人工确认。
最小方案不是重新按北京时间分组,也不是新增格式化服务;前者会改写既有日期键含义,后者没有提供必要的复用价值。现有 typed owner 已足够,保留两个简短的投影表达式更容易审核。没有引入策略开关、provider IO、迁移分支或新的公共词汇。
具体改动 / Changes
评审规格为 docs/development/design.md,固定版本 b78246ff7925a34084d16520040d69ecd6b92316 的 Research Workspace 段落。research-source-scope 已实现:真实 Goal/source 的原始研究仍从同一读取路径加载,浏览零写入;research-reading-continuity 已实现:刷新与前进后退保留日期、问题、结论和返回焦点;research-group-meaning 已实现:分组只表示阅读范围,不生成因果关系,伪造父集合不能借用无关问题。UTC 本身来自原有唯一归组 owner,不在这次补丁中重定义。
关键代码讲解
- GoalResearchTimeline:192 只在已有 day 非空时附上 UTC,空时间仍用原有中英文未知文案;按钮数据键和回调参数没有变。
- GoalResearchHistory:641 在日期组标题补同样的口径。相邻点集合标题、问题索引、结论状态、上下文帮助与返回动作继续使用原实现。
- writeRouteReadingFixture:13 把 24 个未关联问题中的最后一个放到 UTC 23 点,后续结论放到次日;浏览器明确使用 Asia/Shanghai。新增断言检查日期、24 项成员与重载后的标题,原有多语言、桌面/窄屏和读回检查继续执行。
对主干的风险 / Risks
最强反例是文字写 UTC,实际却已按本地日归组,或者补字时顺便改变日期键,让旧阅读链接失效。已核对未改动的 groupUnlinkedHistoryQuestions:它按首次记录的 toISOString().slice(0, 10) 产生 day;两处生产改动均未触碰选择、排序或事件。相同新测试在不可变基线 b78246ff7925a34084d16520040d69ecd6b92316 上因缺 UTC 的断言失败,在本 head 上通过;这比只在 UTC 主机上测试更能检出跨午夜错误。
PASS:npm --prefix apps/presentation/dashboard run build 完成 TS 检查和 dashboard/Chat 打包;既有 packaged research-route-reading 场景通过;标准 loopx canary premerge --from-git-diff --git-diff-base origin/main 通过 diff、双语 RFC、维护性、语义词汇、投影及公开边界检查。读回确认源文件未变、mutation attempts 为零、模型写入为零;伪造无关父集合没有生成组内导航。CI 按当前策略不查询、不轮询、不等待,不能据此宣称远端检查已通过。
本次是 Chromium 打包路径与真实本地历史后端,记录为合成数据、分析读回被截获;不能外推为原生 App 安装、模型推理或真实实验效果的验证。生产只变两处显示字符串,无新持久字段或权限;回滚无需迁移。
我的整体评价 / Verdict
未发现阻塞问题。交付判断是 justified increment:修复明确的日期理解歧义,保留源范围、同组继续阅读和所有已记录信息;研究质量、可比性及完整成本的更大验收仍开放。long_horizon 为 preserved:重载和返回后继续准确阅读,未增加执行循环或成本;user_experience 为 improved:已有阅读任务零新增确认回合。
已查看含长标题和重复问题的 24 项日期组整屏:桌面标题在列表前可见,390px 标题自然换行;原始文本与负结果状态保留,没有新增说明条或必经操作。未验证范围:原生 WebKit/App 的本次安装行为尚未验证;本次视觉证据来自打包 Chromium 页面,分析读回为合成替身。正文截图已直接放在 PR description。当前改动范围必要且成比例,不需要再抽一层共用服务;沿用现有词汇,没有 actor、authority 或可选策略语义变化。review 结论不授予合并权限,合并前仍须核对未变 head、thread 与 readiness。
English verdict: APPROVE at 6b507d9; no blocking findings. Local packaged cross-midnight/read-only validation and standard premerge passed; CI was not consulted, and native App installation remains unverified.
UTC research groups currently appear as plain calendar dates in the timeline and date-group reader, while the record range uses local time. Near local midnight, this can make a correct group look misdated. Show the existing UTC basis at both reading entrypoints; keep date keys, members, routes and unknown-time behavior unchanged.
Extend the existing packaged research-route-reading scenario with a late UTC record that crosses midnight in Asia/Shanghai. Check both locales, desktop/narrow layouts, timeline/graph entry, reload, keyboard return and unchanged 24-question membership. This uses the real local Explore history backend with synthetic records and intercepted analysis readbacks; it performs no model analysis or source mutation.
Validation at
6b507d9dee1e0bd9d18df201b981b03271955875: dashboard/Chat packaged build PASS; packaged research-route-reading PASS; standard canary premerge PASS (diff hygiene, bilingual RFC gate, maintainability/vocabulary/projection and public-boundary checks). The same added oracle fails against production baselineb78246ff7925a34084d16520040d69ecd6b92316because its date label lacks UTC. CI is not a merge-wait requirement. Installed runtime qualification follows review and merge; the screenshots below are packaged synthetic evidence.Visual evidence
Desktop before (1440×900, baseline):
Desktop after (1440×900, tested head):
Narrow after (390×900, tested head):