跳转至

三模式作业显示与日历、邮箱同步验收

历史记录 / Historical record:本文保留当时的计划、研究或验收证据,不代表 0.11 当前能力全集。现行说明见 文档入口;英文入口见 English overview。

2026-10-20;基线 exp / 493378e4。本轮先处理作业与同步,i18n 工程和整体质量审查按 后续计划继续,不能将它们标记为完成。

作业存在,但被底栏遮住

用户确认完整模式能看见同一周作业,极简、实用模式列表能看见,但时间轴没有;列表下方也无法滚到。

真正复现在 1280×600 的简洁桌面窗口:23:59 作业卡位于 y=542.96–596.66,底部 OH 栏从 y=540 开始。作业虽然存在于 DOM,中心点击却命中 ohx-slot。此前以 15:30 作业、空课程和自动滚动点击验收,未覆盖这个情况。

原因是 OneGUI 日程配方将底部内边距归零,而简洁壳在桌面上也有固定底部 OH 栏。时间轴按被遮住的区域一起计算高度,长列表滚到尽头也不能越过遮挡。

已将常驻底栏高度、日程设置钮与 OneShot 的位置收为同一套壳变量。完整桌面、完整手机、简洁桌面和简洁手机各按实际栏位计算;列表末尾增加可滚动的操作空间。简洁手机顶部也按自己的 header 高度计算,避免套用完整模式标签条高度。

修后同一窗口的晚间作业卡位于 y=489.94–536.58,日程可视区停在 y=540,中心命中作业本身。20 项列表能够滚到最后一项,再以坐标点击打开详情。

临时测量中出现的高度 0 来自仍挂载但隐藏的完整模式旧标签,已排除,不作为当前可见页高度塌陷的证据。临时探针及原先输出课程内容的调试日志已移除。

作业数据与日程功能

  • 三模式日程共用网络学堂快照、外部作业和忽略订阅;时间轴、月历标记、所选日清单使用同一组标准化截止时间。
  • 支持 ISO、学校本地时间和 epoch;零点截止仍留在实际日期。忽略/恢复即时刷新,旁听项不混入。
  • 完整模式从作业详情“前往”打开独立标签;简洁模式走实际可见的简洁路由,不再只操作隐藏标签。
  • 日历连接、系统日历同步与 ICS 导出在三模式都有入口;模式切换不修改已有配置。
  • 修复跨日编辑丢失结束日期、空日期/时间变成有效日期、设备时区改变校园时间、午夜结束事件误出现在次日等问题。
  • 网络学堂分项失败不再返回成功空作业;学期切换与刷新后的旧响应不能覆盖新状态。详见 作业数据源检查。

同步审查结果

范围 本轮重点修复 详细报告
云日历 初始化、账号归属、条件写入与冲突、重复系列、先写后删、严格持久化、错误响应与跨域凭据边界 CalDAV 检查
系统日历 完整来源屏障、专属日历 ID、避免错误清空、提醒提前量、停止/删除竞态、Android 分批失败恢复 系统日历检查
邮箱 账号/授权码变更隔离、旧请求丢弃、单飞与分页、正文缓存边界、发信失败保留、原生超时与阻塞任务 邮箱验收

继续保持历史策略:课程、作业不自动上传 CalDAV;手动日程走云日历,课表与作业通过系统日历或显式 ICS 导出。系统日历的 macOS 账户可能自行云同步,不能声称这些事件始终只在本机。

验收方式与边界

  • 原有 schedule-modes-browser-test.mjs 覆盖三模式数据、导航、忽略恢复、同步入口和编辑,共 213 项;底栏修复后 WebKit 两种尺寸再跑 107 项通过。
  • 新 schedule-layout-browser-test.mjs 的 313 项检查通过:Chromium/WebKit × 1280×600 / 390×844 × 三模式冷启动,并覆盖离开返回与简洁模式互切。60 个几何采样均可命中目标,长列表末项完整进入可视区;时间轴检查不调用自动滚入视口。详见 布局证据。
  • learn-snapshot-test.mjs 12 项执行真实 LearnClient 和状态层,仅替换 I/O;失败与乱序响应不会变成成功空快照。
  • 日期验证在 America/Los_Angeles 环境仍按校园时区保存;OneGUI、CSS、动效、文案与设置层级护栏通过。
  • 最终 pnpm guard、pnpm guard:onegui、desktop 类型检查与生产构建均通过。旧图标护栏发现暂存箱自行绘制 SVG,已将 26 种路径移入共享纯模块,经统一 Icons 渲染并供拖拽预览复用;路径逐字保持。技术细节护栏同步检查新抽出的共用日历设置,不降低原覆盖门槛。
  • 以上浏览器验收是桌面/手机尺寸与触摸模拟,不是物理手机验收。Chromium 手机尺寸使用浏览器协议触摸滑动;Playwright WebKit 不支持移动模式滑动/滚轮,采用 390px 触摸视口、真实滚轮与 tap,依然运行生产手机布局。原生应用读取屏幕接口不可用,未冒称真实 App 操作。
  • 学校云日历、真实邮件、系统日历写入和第二账号联调未执行。协议/状态验证使用隔离夹具,不访问真实账户或发送邮件。
  • 原生 Rust 开发构建已更新到本机 dev App 包,但当前运行进程未重启;本轮前端改动可热更新,原生日历/邮箱底层改动须重新打开开发 App 后生效。