exp 分支交接报告(2026-10-19 收尾)¶
历史记录 / Historical record:本文保留当时的计划、研究或验收证据,不代表 0.11 当前能力全集。现行说明见 文档入口;英文入口见 English overview。
面向下一个接手的智能体。仓库
/Volumes/PortableSSD/Projects/thuapp/OneTHU,分支 exp, 远端github=smartThise/OneTHU。dev server 常驻http://127.0.0.1:5180。
当前状态¶
本会话把「实用模式(第三模式)」「课表页快捷收纳 + 拖动」「简洁壳隐藏云同步/寻迹」 「通讯录直接粘贴收名片 / 组织名片并进名片夹」「硬刷新钮自动避让 + 可拖动」 「pnpm guard 过期断言全量收口」都做完并提交;浏览器回归已跑到 5 个套件全绿。
本会话提交¶
| commit | 内容 |
|---|---|
91e67e1a |
实用模式(含设置三选一/导览三课/独立存档)+ 课表 OneShot 收起/拖动/动效 + 作业详情课程行 + 简洁壳隐藏云同步与寻迹 + 手机课表底栏净空 + 硬刷新钮自动避让/拖动 |
b78d52f2 |
通讯录直接收名片 + guard 过期断言收口(16 个 guard 脚本,pnpm guard 转绿),并修设置分节映射真 bug |
a64f22e4 |
名片夹组织名片 + 收名片入口收成一颗按钮(工具条消肿) |
3cabc79b |
组织卡并进同一个名片夹牌堆(用户口径「应该和其他名片夹在一起」) |
8876c229 |
暂存箱回归跟上统一收发/新锚点口径(42 条绿) |
注意:b78d52f2 之前已推过 exp;a64f22e4/3cabc79b/8876c229 若尚未推,先 git push github exp。
已完成并可验收的点¶
1. 实用模式(practical)¶
state/experienceMode.ts:三模式full | simple | practical,isSimpleLike()(极简/实用共用简洁壳)。- OneShot:第五格固定
MORE_FEATURES_SLOT="more";左四格可配置(state/quickAccess.ts,独立存档onethu.oneshot.practical.v1);「更多功能」面板按功能目录分组,点「+」放进入口 → 面板收起、底栏入口亮编号 → 点位放置。 - 设置「使用模式」三选一;导览换成模式向导(
onethu.onboarded.flow4,兼容 flow3/phone 旧标记;resetActiveOnboarding()清 flow4)。
2. 课表页(is-schedule-page)¶
- OneShot 默认收成一枚「快捷」小按钮,浮在「日程设置」上方;
grid-template-rows 0fr/1fr过渡动效;按住可上下拖动并记住位置(onethu.quickbar.schedule-offset.v1)。 - 手机档课表内容加底栏净空(
packages/gui/src/recipes/schedule.css),最后一节课不被底栏盖住。 - 作业详情补「课程 / 截止」两行(learn 作业 courseId→courses 映射)。
3. 简洁壳收口¶
- 日程设置只留「刷新」(云同步/系统日历按钮与文案一并藏);新建日程不再默认写云日历;课程详情无「寻迹」;
compactPageAllowed()把trace也挡掉,搜索/OH 历史/实用面板共用同一白名单;atoms 日程副标题去掉「·云同步」。
4. 通讯录¶
- 名片夹工具条只留一颗「接收名片」→ 面板三选(粘贴口令 / 识别二维码 / 从暂存箱收)。
- 自己的组织名片并进同一个
.contact-deck牌堆(我的名片 → 组织 → 好友);共用OrgCardDetailModal(放进暂存箱/复制加入方式/管理组织/删除)。
5. 硬刷新悬浮按钮¶
- JS 自动找位(右下起步,避开 OneShot/日程设置/白板工具栏/暂存箱/回到顶层/底栏;往上让、挤了往左挪),窗口/标签变化重算。
- 按住可拖动、按设备记忆(
onethu.ui.refreshFab.v1);「回到顶层」跟随叠在上面。
6. guard¶
pnpm guard全绿(含 typecheck)。16 个脚本里过期的 OneGUI 收编断言已改为当前事实(.og-*、OneGUI 弹层/开关/进度、新导览 flow4、新首页锚点等);已退役组件(.plg-*、.bottom-nav、sidebar、Today.tsx、V3 导览)的断言删除并注明替代物。
测试状态¶
pnpm guard # ✅ 全绿
node tools/experience-browser-test.mjs # ✅ 实用模式全链路
node tools/schedule-timeline-browser-test.mjs # ✅ 18
node tools/short-share-browser-test.mjs # ✅ 49
node tools/vault-browser-test.mjs # ✅ 42
node tools/namecard-browser-test.mjs # ✅ 14
node tools/org-browser-test.mjs # ✅ 11
node tools/mobile-vault-browser-test.mjs # ✅ 14
node tools/feedback-repairs-browser-test.mjs # ✅(含手机硬刷新钮不压白板工具)
待复跑(本会话未扫):tools/feedback-round2-browser-test.mjs、tools/short-code-test.mjs、
tools/platform-test.mjs、tools/board-*、tools/viewer-* 等。
接手必读的坑¶
- OneShot 课表态结构:
.oneshot.is-schedule > (.oneshot-slots-wrap > .oneshot-slots) + .oneshot-schedule-toggle;拖动 handle 是外层.oneshot-schedule-dragspan,click 必须绑在 span 上(pointer capture 会把 click 目标改成 span,绑 Btn 上点不动)。 - 模式数据隔离:实用模式只写
onethu.oneshot.practical.v1;课表快捷位置键名onethu.quickbar.schedule-offset.v1(别带oneshot字样,experience 测试的存档快照比对会误判)。 - 收名片:统一入口
useVaultReceive().paste()/scan()→contentExchange.receivePastedCode(名片/组织/名片串/暂存箱都认);「接收」语义现在是总是开新暂存箱,不覆盖当前箱。 - 短码/云分享:
vaultShare.shareCodeForBox复用未失效短码;decodeShareAsync对短码走cloudExchange.resolveExchangeCode;测试 mock 适配器必须真写假云盘:write_temp_file → seafile_upload → seafile_share(expireDays>0)(0 天会立即过期)。 - 假云盘测试:
tools/lib/fake-cloud.mjs,installFakeCloud(page,{token})要在goto前;页面内模块调用按performance.getEntriesByType('resource')找 URL(HMR 带?t=),并setResourceTimingBufferSize(10000)。 - 红区:OJ 作业题严禁直接改;切模式不得删/覆盖完整模式数据。用户对 UI 观感零容忍——改完先自己截图实测(本会话截图在
docs/onegui/experience-mode/)。
建议下一步¶
git push github exp。- 复跑未扫的浏览器回归,确认无回归后把 docs 截图/报告一并提交。
- 用户验收观感:课表「快捷」拖动位置与动效、手机课表底栏净空、通讯录牌堆顺序、接收名片面板文案。
- 可扩展:组织口令接收也接到「我的组织」页签;首页空态加入「接收名片」。