Skip to content

bug(schedule): 删除单次重复日程后,前端收不到 occurrence_override,日历/提醒不会同步 #272

Description

@LUPENGHAN

Proposal

给 voice.command.result 消息加一个 occurrence_overrides 字段,携带这次操作产生的 override(如果有);LocalScheduleWriter.applyCommandResult 收到后直接调用已有的 ScheduleLocalRepository.upsertOccurrenceOverride 写入本地 local_schedule_occurrence_overrides 表。

Background

关联 #159(通过语音管理日程,要求重复日程删除必须能区分"仅本次/本次及未来/整个系列")。后端这三种 scope 的业务逻辑已经完整实现并测试(service.py 的 _delete_recurring_range/truncate_rule_before_occurrence),但 scope=this_occurrence 产生的 ScheduleOccurrenceOverride 行只存进了后端数据库,从没传给前端——voice.command.result 消息(gateway/websocket/messages/agent.py)只有 schedule/schedules 字段。LocalScheduleWriter.ts 自己的注释里已经写明了这个已知缺口。

Workarounds

无——语音说"删除这次"之后,后端数据是对的,但本地日历/提醒完全不会反映这次取消,用户会看到一个理论上已经删掉的实例继续正常提醒。

验收标准

  • 语音说"删除这次"(scope=this_occurrence)后,本地 local_schedule_occurrence_overrides 表里出现对应记录
  • 本地日历视图/提醒调度能正确反映"这一次被取消了,其余按原规则继续"
  • scope=this_and_future/entire_series 两种既有路径行为不受影响(它们不产生 override,直接改 recurrence_rule/软删)

本轮不做(Out of Scope)

  • 不接 SqliteScheduleSyncService 的全量快照同步(frontend/src/features/sync/**)——那是独立的更大缺口,已知未接,另开 issue
  • 不新建 frontend/src/features/sync/data/** 数据层适配器

边界

  • 改动:backend/src/timeflow/gateway/websocket/messages/agent.py(加字段)、backend/src/timeflow/intelligence/realtime/schedule_tools.py(_mutation_result 填充字段)、backend/src/timeflow/gateway/websocket/handlers/agent_result.py(透传)、frontend/src/features/assistant/domain/ConversationTurn.ts(AppliedCommand 加字段)、frontend/src/features/assistant/data/local/LocalScheduleWriter.ts(写入本地表)

规格:MiniSpec

Metadata

Metadata

Assignees

No one assigned

    Labels

    MiniSpecbugSomething isn't working

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions