Proposal:日程模块与日程 Tab(V2)
1 功能描述
日程 Tab 是 TimeFlow 的时间执行视图,用于回答“某年、某月、某日已经安排了什么,哪些时间仍为空闲”。它同时展示 Schedule、有计划时间的 Todo 和所有正式 Task,但三类对象仍保持各自权威语义,不被合并成通用对象。
Schedule 表达“某段明确时间发生的安排”,标题、开始时间和结束时间必填。Schedule 不设置固定/不固定、可移动/不可移动字段,也不在创建或编辑时要求用户分类。只有 AI 生成 Goal 排期或重排方案时,才根据 Schedule 的 title 临时判断是否提出调整动作;该判断只属于本次方案,不写回 Schedule。
时间经过不等于完成。Schedule 的完成、取消及 Feedback 必须由用户主动确认。跨天 Schedule 与某个自然日存在时间交集时,在该日展示同一个业务对象,不复制数据。
2 用户
目标用户
- 管理课程、会议、值班、预约等固定安排的学生和职场人员。
- 同时管理普通 Todo 和 Goal Task,需要看清完整时间占用的用户。
- 需要从年度/月度总览进入具体日执行时间轴的个人用户。
用户故事
| 场景小故事 |
对应能力 |
价值 |
| 我明天 15:00—16:00 有项目会议。 |
普通 Schedule 记录 |
创建时只保存 title 和时间,不要求选择类型 |
| 我计划晚上健身一小时,后来需要重排。 |
排期时临时判断 |
AI 根据 title 决定是否提出调整,并把具体动作交给用户确认 |
| 我今晚 23:00 至明日 01:00 值班。 |
跨天展示 |
两个自然日都能看见同一安排 |
| 我想看下个月哪几天最忙。 |
月视图 |
快速识别负载分布 |
| 我想看今天的会议、Todo 和 Goal Task。 |
日视图统一时间轴 |
不用跨页面拼接计划 |
| 会议结束了但我没参加。 |
主动 Feedback |
系统不把时间经过误判为完成 |
3 现有做法及不足
| 现有做法 |
可以解决 |
仍然存在的问题 |
| 手机系统日历 |
固定时间展示成熟 |
与 TimeFlow 的 Todo、Goal Task、Feedback、重排和复盘割裂 |
| 把所有事项都写进日历 |
获得统一视觉 |
混淆 Schedule/Todo/Task 语义 |
| 原 #46 的日期列表和今日页 |
支持单日查看 |
缺少年/月总览,今日页也已被新三 Tab 结构替代 |
| 仅按开始日期展示跨天事项 |
实现简单 |
后续日期看不到仍在进行的占用 |
| 在 Schedule 上预先保存固定/可移动分类 |
后续重排读取方便 |
增加创建负担,分类可能随具体排期场景变化 |
核心问题是需要一个统一时间投影,同时保留三类对象边界,并让 AI 在实际排期时基于 title 做当次调整判断,而不是给 Schedule 永久分类。
4 产品范围
日程 Tab 视图
- 年视图:展示月份和日期级事项密度/数量概览,支持进入某月或某日;不在年视图承载完整编辑。
- 月视图:按自然月展示每日 Schedule、已排期 Todo 和 Task 的摘要、数量和冲突提示;支持进入某日。
- 日视图:展示完整时间轴、三类已排期对象和未排期 Todo 区域,是主要执行与手动反馈入口。
- 年/月/日读取同一批权威对象,切换视图不得生成副本或改变状态。
Schedule 功能
- 支持手动创建、查看、编辑、删除 Schedule;AI Tab 可通过候选确认完成同类 CRUD。
- 标题、开始时间、结束时间必填;结束时间必须晚于开始时间。
- 支持跨天和过去 Schedule 补录。
- 正式状态由用户确认;未开始、进行中、已结束是时间推导的展示态。
- 创建或编辑 Schedule 时不展示固定/可移动分类,也不保存相关字段。
- Goal 排期或重排时,AI 根据 Schedule title 临时判断是否提出移动某个 Schedule。
- 方案必须展示每个 Schedule 的原时间、新时间和调整理由;用户未确认前不得改变原 Schedule,且本次判断不得写回成为长期属性。
- Schedule 可通过自然语言或表单提交统一 Feedback。
- 时间或状态变化后通知能力更新/取消关联提醒;提醒失败不阻断 Schedule 操作。
三类对象统一展示
- 正式 Task 必须有完整时间,因此始终可以投影到对应日期和时段。
- 有计划时间的 Todo 投影到时间轴;无计划时间 Todo 留在待办区域,不伪造占用。
- 点击投影进入对应对象详情或操作,不把 Todo/Task 转为 Schedule。
- 三类对象都可以从日视图进入表单 Feedback;AI Feedback 仍只能从 AI Tab 发起。
明确不做
- 第三方日历同步、共享日历、团队排班、复杂重复规则。
- 把 Schedule、Todo、Task 合并成单一通用对象。
- 独立“今日”一级页面或第四个主 Tab。
- 在日程 Tab 中开启 AI 会话或自动把页面上下文带入 AI Tab。
- 因时间经过自动完成任何对象。
- 在 Schedule 上保存固定/不固定、可移动/不可移动标签或要求用户手动分类。
后续可拓展
- 重复 Schedule、外部日历、拖拽排期和更复杂日历视图。
- 更细的负载可视化,但不得改变权威数据边界。
5 关键决策
| 决策点 |
方案 |
结论 |
理由 |
| 信息结构 |
今日页 + 日期列表 |
不选 |
无法承载年/月总览,且不符合三 Tab |
| 信息结构 |
年/月/日的日程 Tab |
采纳 |
同时覆盖总览、计划和执行 |
| 对象建模 |
三类对象合并 |
不选 |
固定安排、普通事项和 Goal Task 语义不同 |
| 对象建模 |
独立权威对象 + 统一投影 |
采纳 |
展示统一,业务不混淆 |
| Schedule 调整判断 |
在对象上长期保存分类 |
不选 |
增加字段和创建负担,且不同排期场景可能需要重新判断 |
| Schedule 调整判断 |
AI 在排期时根据 title 临时判断 |
采纳 |
Schedule 保持简单,具体调整仍由方案确认控制 |
| 完成判断 |
时间结束自动完成 |
不选 |
时间经过不能证明真实执行 |
| 完成判断 |
用户通过 Feedback 确认 |
采纳 |
正式状态只记录确认事实 |
| 跨天展示 |
只按开始日期 |
不选 |
后续日期丢失占用 |
| 跨天展示 |
与日期相交即展示 |
采纳 |
符合用户认知 |
| Task 排期 |
允许无时间正式 Task |
不选 |
与 Goal 拆分执行要求冲突 |
| Task 排期 |
正式 Task 必有时间 |
采纳 |
可以直接进入日程执行视图 |
6 边界与异常
边界规则
- Schedule 时间范围使用左闭右开语义;与某自然日范围相交即展示。
- 所有日期、视图和展示态按用户当前时区解释。
- 时间只影响展示态,正式状态由用户确认。
- Schedule 不包含可移动性分类;AI 的判断只存在于当次 GoalPlanDraft/ReschedulePlan 中。
- 年/月/日视图和下游模块只能读取权威对象,不维护可独立修改副本。
- 三类对象在同一时段重叠时如实展示冲突,不静默移动。
异常场景与处理方式
| 场景 |
系统行为 |
原则 |
| Schedule 标题为空 |
禁止保存并提示 |
数据完整性 |
| 结束时间早于或等于开始 |
禁止保存并提示有效范围 |
时间有效性 |
| 过去 Schedule 补录 |
允许保存,不注册已经过期提醒 |
支持真实记录 |
| 时间经过结束 |
只改变展示态,不自动完成 |
时间不等于事实 |
| 跨天 Schedule |
所有相交日期显示同一对象 |
不复制数据 |
| AI 提出的 Schedule 调整不合适 |
用户可删除该动作或要求重新生成;未确认前原 Schedule 不变 |
用户确认 |
| 同一对象被重复投影 |
去重并记录异常 |
单一权威对象 |
| 某类数据加载失败 |
明确标记局部不可用,不用其他类型冒充 |
数据透明 |
| 提醒失败 |
Schedule 保存成功,提醒单独恢复 |
附加能力隔离 |
| 当前用户不匹配 |
拒绝访问且不泄露对象 |
数据隔离 |
7 基本概念与信息结构
| 概念 |
含义 |
| 日程 Tab |
Schedule/Todo/Task 的统一时间投影和手动操作入口 |
| Schedule |
有明确开始/结束时间的安排 |
| Schedule 调整判断 |
AI 在排期时根据 title 产生的临时推理,不是 Schedule 属性 |
| 展示态 |
未开始、进行中、已结束,由时间推导 |
| 时间投影 |
在年/月/日视图展示权威对象,不复制数据 |
信息结构:日程 Tab → 年/月/日切换 → 日期/时间轴 → Schedule、已排期 Todo、Task → 对象详情/表单 Feedback。无计划时间 Todo 在日视图待办区域,Goal 汇总仍在目标 Tab。
8 验收标准
| 用例 |
操作 |
通过标准 |
| 三视图一致 |
在年/月/日切换同一日期 |
事项数量和对象来源一致 |
| 三类展示 |
某日同时存在 Schedule、Todo、Task |
日视图按时间展示三类对象且类型明确 |
| 无时间 Todo |
创建无计划时间 Todo |
出现在待办区域,不占用时间轴 |
| 正式 Task |
Goal 计划确认后查看日程 |
每个 Task 在完整起止时间显示 |
| 无预分类 |
分别创建“项目会议”和“健身” |
两个 Schedule 都只保存 title、时间等正常信息,不出现固定/可移动字段 |
| 排期时判断 |
重排中同时存在“项目会议”和“健身” |
AI 根据 title 临时判断是否提出移动;具体动作逐条展示且必须确认 |
| 判断不写回 |
完成一次重排后查看 Schedule |
Schedule 上不存在由本次判断产生的分类或标签 |
| 跨天 |
创建 23:00—次日 01:00 Schedule |
两日展示同一业务对象 |
| 状态 |
时间经过但用户未反馈 |
展示态变化,正式状态不自动完成 |
| Feedback |
从日视图提交表单 |
确认后状态与 Feedback 原子更新 |
| 数据一致 |
编辑来源对象后切换三个视图 |
所有视图同步,无副本漂移 |
| 提醒降级 |
通知权限关闭 |
Schedule 仍可正常保存和编辑 |
Proposal:日程模块与日程 Tab(V2)
1 功能描述
日程 Tab 是 TimeFlow 的时间执行视图,用于回答“某年、某月、某日已经安排了什么,哪些时间仍为空闲”。它同时展示 Schedule、有计划时间的 Todo 和所有正式 Task,但三类对象仍保持各自权威语义,不被合并成通用对象。
Schedule 表达“某段明确时间发生的安排”,标题、开始时间和结束时间必填。Schedule 不设置固定/不固定、可移动/不可移动字段,也不在创建或编辑时要求用户分类。只有 AI 生成 Goal 排期或重排方案时,才根据 Schedule 的 title 临时判断是否提出调整动作;该判断只属于本次方案,不写回 Schedule。
时间经过不等于完成。Schedule 的完成、取消及 Feedback 必须由用户主动确认。跨天 Schedule 与某个自然日存在时间交集时,在该日展示同一个业务对象,不复制数据。
2 用户
目标用户
用户故事
3 现有做法及不足
核心问题是需要一个统一时间投影,同时保留三类对象边界,并让 AI 在实际排期时基于 title 做当次调整判断,而不是给 Schedule 永久分类。
4 产品范围
日程 Tab 视图
Schedule 功能
三类对象统一展示
明确不做
后续可拓展
5 关键决策
6 边界与异常
边界规则
异常场景与处理方式
7 基本概念与信息结构
信息结构:
日程 Tab → 年/月/日切换 → 日期/时间轴 → Schedule、已排期 Todo、Task → 对象详情/表单 Feedback。无计划时间 Todo 在日视图待办区域,Goal 汇总仍在目标 Tab。8 验收标准