Skip to content

每日计划表:时间段模板 + 桌面悬浮件 - #5

Merged
modusensus merged 2 commits into
masterfrom
feat/daily-plan
Nov 5, 2026
Merged

modusensus merged 2 commits into
masterfrom
feat/daily-plan

Conversation

@modusensus

@modusensus modusensus commented Nov 5, 2026 •

Copy link
Copy Markdown
Member

这是什么

每天固定模板的「哪个时间段做什么事」:08:00~09:30 背单词 【英语】 一行一条。

  • 主面板分区:当前时段高亮(语义色 state-business,与「当前节点」chip 同款)+ 剩余分钟,已过变暗;
  • 模型侧:系统提示注入「现在按计划该做什么 / 下一场」,AI 才能对着计划督促(与已合入的番茄钟走完提醒成一套);
  • 桌面悬浮件:第二个 shell.overlay,坑位规矩照抄迷你条(portal 到 body / no-drag / pointer-events:auto / z-index:900 / clampMiniPos 避开标题栏拖拽带),默认位叠在迷你条上方,落点单独存,可收成小圆点;
  • 两个独立开关:设置页里「启用」与「悬浮在桌面上」各自独立,关悬浮立刻生效。

设计要点

  • 校验与「现在该做什么」只在 desk.js 一处(normalizeDailyPlan / dailyPlanNow):坏行忽略、起终写反丢弃、按开始时刻排序;快照 dayPlan 与系统提示同源。客户端 pmin() 只做钟表换算(哪行是 now、剩几分钟),与画倒计时同档,不另写排序校验。
  • 悬浮件渲染与否由 dailyPlan.enabled && dailyPlan.float 决定,钩子全部先走完再判 null(开关翻动瞬间不少调钩子)。
  • 命中测试诊断沿用 probeOverlayHit,加了 tag 参数:计划表悬浮件记 plandock-covered / plandock-under-modal,与迷你条分开看。

验证

  • node --test:73 个单测全绿(新增计划表归一化 / 区间判定 / 单独开关 / 悬浮件坑位守卫——no-drag、pointer-events、z-index:900、默认位不重叠、钳制不许另起炉灶)。
  • node apply-probe.mjs 全绿(7 槽位断言、dailyPlan.update 坏行校验、快照 dayPlan 形状)。
  • 真挂载无头 Edge(真 React 18 + 复刻宿主外壳 + 宿主 token):浅/暗两主题截图确认渲染;?planopen=1 展开全天列表、?planfloatoff=1 从设置页关悬浮→件消失(POST 通路里出现 dailyPlan.update)。
  • 待办:真机 DSH 过一遍(悬浮件拖动 / 标题栏那条带只有真 Electron 能复现)。

备注

  • tools/shot-harness.mjs:宿主半边自上一批起带 10s 看门狗 setInterval,harness 现在会跑掉 effect 清理函数并显式退出,否则进程退不出去。
  • 合入后要在跑着的 DSH 里生效:node install.mjs --bump + 插件管理停用再启用;客户端改完刷新即可。

这个 PR 还带着一个既有提交

本地 master 原本就比 origin 多 ee612ad(看板与番茄一批:过卡模式、卡片截止、当天明细、复制周报、全套图标、AI 起钟门禁与走完提醒回会话)——已提交但一直没推。开分支时自然被带进来,本 PR 因此含两个提交;合入后 origin/master 与本地对齐。若想让它直接进 master 而不走这个 PR,告诉我即可拆开重开。

看板这批:
- 复习:过卡模式(全屏单卡,空格翻备注、1/2/3 打分、→ 跳过);行级「缓一天」走 review.schedule,难度与遍数保留;队列键 1/2/3 直评队首
- 卡片截止日期 dueDate:新建 @YYYY-MM-DD、卡面 ⏰ 徽章、编辑器日期框;工具加 dueDate 参数、系统提示带【截止】;Markdown 行尾 ddl 字段往返,注释里删掉即清空
- 热力图点格子展开当天专注明细(原始 session 列表,聚合仍在 desk.js)
- 周报:新增 weekly.text op + 「复制周报」,与工具 report 同一份 weeklyText
- 复盘:停手 2 秒自动落盘,换面板卸载前补存
- 设置:科目编辑器,最后一个不可删(对齐宿主「空列表不动旧值」)
- 快捷键:/ 聚焦搜索、n 开新建
- 视觉:投入条统一绿族(暗色下品牌色解析成近白)、列头状态点、计时卡运行态描边、输入焦点环、打分键语义 hover;style.test 增补颜色守卫
- 图标:品牌番茄进 package.json 的 icon(插件管理页+设置侧栏),侧栏重画两枚(工作台=任务卡+计时徽章、单词打卡=词书打勾)
- 诊断:mini 命中测试分档——盖的人住在宿主模态层(z≥1000)记 mini-under-modal(设计内让位),普通内容覆盖才是 mini-covered

番茄这批:
- 工具 focus 起钟必须挂一张「进行中」的卡,不挂卡/不在 doing 直接拒绝并教完整流程;只限工具路径,手动起钟不受限
- AI 起钟记 by:'ai' + 会话 id,走完(含自动摆的休息)由 emitTimerEnd 往起钟会话发自动提醒;手动停钟永不提醒
- settings.notifySessionOnTimerEnd 开关(默认开),设置页有勾选;宿主侧 10 秒看门狗兜底结账

工具与杂项:
- tools/shot-harness.mjs(真挂载视觉验证)与 compose-shots.py 等对照图脚本入库
- 删掉误入库的空文件;.gitignore 补 .v2c/
- desk.js:state.dailyPlan(enabled/float/items)在 normalizeDailyPlan 一处校验——坏行忽略、起终写反丢弃、按开始时刻排序、超 48 条截断;dailyPlanNow 单点算「现在在哪个区间 / 下一场」,系统提示注入与快照 dayPlan 都从它取
- index.js:快照带 dayPlan;boardText 注入「现在按计划该做什么 / 下一场」,模型才能对着计划督促;新增 dailyPlan.update op(客户端开关与编辑器共用)
- client.js:主面板新分区(当前时段高亮 + 剩余分钟,已过变暗);设置页编辑器(一行一条的 textarea,起<终预检,真正的规矩在宿主一处)与两个独立开关(启用 / 悬浮);第二个 shell.overlay 悬浮件 PlanDock——坑位规矩照抄迷你条:portal 到 body、no-drag、pointer-events:auto、z-index:900、clampMiniPos 顶部避开标题栏拖拽带,默认位(bottom:64px)叠在迷你条上方互不打架,落点单独存 plan-pos,可收成小圆点、双击回默认位;当前时段高亮走 state-business 语义色,与「当前节点」chip 同款
- 测试:73 个单测(新增计划表归一化 / 区间判定 / 单独开关 / 悬浮件坑位守卫:no-drag、pointer-events、z-index、默认位不重叠、钳制不许另起炉灶);探针改 7 槽位断言并补 dailyPlan.update 校验与快照 dayPlan 形状;shot-harness 支持 ?plan=1 伪造开启计划表的快照、?planopen / ?planfloatoff 验展开与「设置页关悬浮→件消失」整链,并把宿主 effect 的清理函数跑掉(番茄督促带来的 10s 看门狗 setInterval 不清进程退不出去)
@modusensus
modusensus merged commit a23b728 into master Nov 5, 2026
3 checks passed
@modusensus
modusensus deleted the feat/daily-plan branch November 5, 2026 00:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant