Proposal
把 #161(本地提醒送达,已 Accepted)定稿的产品行为工程化落地:新建 Android 原生闹钟模块 + 本地提醒引擎(domain/application)+ 设备侧适配器(通知/震动/音频/定位)+ SQLite 数据层,替换现有的全 Mock 桩实现,接入 App 组合根。
Background
#161 明确写了"不在本 Proposal 中决定 Android 调度框架、定位算法或 TTS 服务实现"——这些工程选型是本 Issue 要做的事。当前 createAppServices.ts 里构造的 reminder 是 MockReminderApplication(纯桩),所有设备端口也都是 Mock,提醒功能完全不可用。
关键决策与依据
| 决策点 |
备选方案 |
选择 |
理由 |
| Android 闹钟调度 |
复用 Expo 本地通知调度 / 自建原生 AlarmManager 模块 |
自建原生模块(timeflow-alarm) |
Expo 本地通知后台存活和精确触发不如 AlarmManager+BOOT_COMPLETED 重排;#161 要求断网时提醒仍可达 |
| 地理围栏判定 |
应用侧连续定位轮询+Haversine(百度 SDK)/ 系统原生 Geofencing API(expo-location) |
系统原生 Geofencing |
系统 API 由 OS 管理省电、后台更可靠 |
| 提醒数据来源 |
沿用内存态 Mock 数据 / 接入真实 SQLite |
接入真实 SQLite |
提醒必须基于用户真实创建的日程 |
| 四个适配器 PR 的合并顺序 |
各自独立合并(互不冲突)/ 依次合并 |
依次合并 267→268→269→270 |
四个 PR 都需要改 createAppServices.ts 里各自负责的端口那几行,属于同一文件不同行的并发修改;GitHub 允许它们同时被 approve,但后合的会在合并时与先合的产生 diff base 偏移,需要合并一个、其余三个重新 rebase 一次,不能真正并行落地 |
基本概念与信息结构
沿用 #161 已定义的:提醒配置/提醒实例/送达方式/提醒完成/提醒延期/已送达/提醒状态。新增工程概念:LocationMonitorPort/AlarmSchedulerPort/DeviceCapabilityPort/NotificationChannels/ReminderDeliveryPort(域与基础设施之间的边界端口);geofence_radius_meters(围栏半径,本期硬编码 200 米)。
验收标准
本轮不做
- 百度定位模块(timeflow-baidu-location/NativeLocationMonitor/BaiduLocationBridge)本次整个删除,不接入也不留死代码
- 云端日程同步触发的数据刷新(SqliteScheduleSyncService)——生产代码里零调用点,另开 issue
- geofence_radius_meters 硬编码 200 米,不做成可配置,记录为已知简化
- 语音/位置搜索的三个不相关小修复不在这个 issue 里,单独走
边界
规格:FullSpec
Proposal
把 #161(本地提醒送达,已 Accepted)定稿的产品行为工程化落地:新建 Android 原生闹钟模块 + 本地提醒引擎(domain/application)+ 设备侧适配器(通知/震动/音频/定位)+ SQLite 数据层,替换现有的全 Mock 桩实现,接入 App 组合根。
Background
#161 明确写了"不在本 Proposal 中决定 Android 调度框架、定位算法或 TTS 服务实现"——这些工程选型是本 Issue 要做的事。当前 createAppServices.ts 里构造的 reminder 是 MockReminderApplication(纯桩),所有设备端口也都是 Mock,提醒功能完全不可用。
关键决策与依据
createAppServices.ts里各自负责的端口那几行,属于同一文件不同行的并发修改;GitHub 允许它们同时被 approve,但后合的会在合并时与先合的产生 diff base 偏移,需要合并一个、其余三个重新 rebase 一次,不能真正并行落地基本概念与信息结构
沿用 #161 已定义的:提醒配置/提醒实例/送达方式/提醒完成/提醒延期/已送达/提醒状态。新增工程概念:LocationMonitorPort/AlarmSchedulerPort/DeviceCapabilityPort/NotificationChannels/ReminderDeliveryPort(域与基础设施之间的边界端口);geofence_radius_meters(围栏半径,本期硬编码 200 米)。
验收标准
本轮不做
边界
createAppServices.ts必须按 267→268→269→270 顺序依次合并,每次合并后其余未合并分支需重新 rebase;子 PR 描述里"可以并行审、任意顺序合"仅指代码审查可以并行,不代表可以并行合并规格:FullSpec