31 Commits
Author SHA1 Message Date
cuiluzheng 32b05acd6f docs: 补记睡眠时段图与功能开关联动修复(spec §6.2 / §6.3)
- §6.2 睡眠时段图:动因(用户原话「只有最高时间最低时间,我不知道一天内具体什么时候睡的觉」)、
  SleepSession 为何不复用 MetricPoint、横轴锚在 20:00 的理由(含 % 86400000 是 UTC 余数这个坑)、
  轴范围由数据算、只用一个颜色不假装知道分期位置、刻度文字为何画在 Canvas 里、
  以及睡眠页撤掉柱状图的理由
- §6.3 功能开关联动:现象与根因(两个互不引用的字段 + 「开关 id 与枚举长得像」这个巧合)、
  修法(MetricType.switchId、仓库订阅开关流、todaySummary 刻意不给默认值)、
  顺带纠正的两处(未开启不画图、血压卡恢复可点击),以及三项已知未修的结构性重复
- §5.1 接口补 functionSettings / observeSleepSessions / SleepSession / MetricType.switchId
- §6.1 睡眠页的「趋势图」改为「睡眠时段图」;§6 的 M1 差异注记标注同日已关闭
- §7.3 组件清单补 SleepWindowChart 及其与 MetricBarChart 的边界
2026-09-10 16:49:28 +08:00
cuiluzheng afc08b2d92 docs: 归档 M0+M1 执行期裁定记录,修正计划头部的工具链版本 2026-09-10 13:38:53 +08:00
cuiluzheng c3eb0b5b76 docs: 更正 M2 交接面清单,回填 spec 与交付的实际偏差(ledger R35) 2026-09-10 13:10:28 +08:00
cuiluzheng a18523f032 docs: Task 12 用例三补鉴别力、previewPoints 补 step 参数(ledger R34) 2026-09-10 12:41:17 +08:00
cuiluzheng cd6d53a3b6 docs: 修正 Task 14 的 docs 仓库路径、暂存方式与验收记录中的不实陈述 2026-09-10 12:33:32 +08:00
cuiluzheng 06cd3916e3 docs: Task 12 睡眠区块去掉恒真判空(ledger R33) 2026-09-10 12:32:29 +08:00
cuiluzheng 1c491254ff docs: Task 13 澄清 git add -A 的豁免前提(ledger R32) 2026-09-10 12:23:16 +08:00
cuiluzheng 0aa36e3056 docs: Task 14 补 setFunctionEnabled 的 KDoc 步骤(ledger R31) 2026-09-10 12:16:51 +08:00
cuiluzheng 63700f933d docs: Task 12 测试用例改名以匹配其实际断言 2026-09-10 11:33:37 +08:00
cuiluzheng 955004f83b docs: 全局约束补提交暂存规则(只 add 本任务文件) 2026-09-10 11:33:31 +08:00
cuiluzheng c9b1070869 docs: Task 12 预览样例数据按指标取值、Task 14 补推送核对与 BOM 版本 2026-09-10 11:33:23 +08:00
cuiluzheng 706b2797ff docs: Task 14 验收记录改写为本机实际可验内容,并显式声明覆盖缺口 2026-09-10 11:32:49 +08:00
cuiluzheng f55158e99c docs: Task 13 补推送失败时的处理(不做 --force) 2026-09-10 11:32:38 +08:00
cuiluzheng 85abf5daf2 docs: 补 Task 12 的 ViewModel 测试与 Preview、修正 Task 14 测试数与孤儿字符串清扫 2026-09-10 11:30:58 +08:00
cuiluzheng 430e669702 docs: 修正 Task 11 计划(补 Preview、按 R21 改写验证步骤、标注版本号手抄副本) 2026-09-10 11:25:11 +08:00
cuiluzheng 7b111b33f3 docs: 修正 Task 10 计划(补 DeviceViewModel 测试与 Preview,修正步骤编号与文案清单) 2026-09-10 11:23:05 +08:00
cuiluzheng 5c82c38ef5 docs: 提炼 TextSecondary 与 @Preview 两条全局约定(ledger R26)
- 禁用 colorScheme.onSurfaceVariant(与 TextSecondary 灰度不一致,编译器拦不住)
- 页面统一拆「有状态外壳 + 无状态内容」并给内容加 @Preview,
  R21 下这是 Task 14 之前唯一的界面检查手段
- Task 14 人工清单加:Preview 可渲染、次要文字灰度一致、重按父 Tab 实测项
2026-09-10 11:19:30 +08:00
cuiluzheng 5c7afbbea3 docs: Task 9 派发前修正四处(ledger R25)
- 删除两条无消费者的新字符串 workout_detail_duration / workout_history
- WorkoutHistoryScreen 先判 loading 再判空,避免闪「暂无运动记录」
- 补 WorkoutViewModelTest(TDD),Task 9 步骤重编号为 Step 1..9
- 记录日期+时间插值不违反文案约束,避免复审误报
2026-09-10 11:11:03 +08:00
cuiluzheng f23580de47 docs: 删除不可编译的 lazy.item import(ledger R24)
item 是 LazyListScope 的成员函数而非顶层扩展,无法 import;
该行单独即可导致 Unresolved reference。仅 items(List<T>) 需要 import。
由 Task 8 实现者 javap 反编译产物核实后推翻我的核验结论。
2026-09-10 11:04:13 +08:00
cuiluzheng bcf5d07df8 docs: 修正 Task 8 的硬编码单位与验证步骤(ledger R23)
- unit = "mmHg" 改为 stringResource(R.string.unit_mmhg),
  与同列表内次/分、%、°C 的处理保持一致,新增 unit_mmhg 资源
- Step 8 标题与 Expected 去掉「真机验证」,界面验证按 R21 顺延到 Task 14
2026-09-10 10:59:20 +08:00
cuiluzheng f35cf329ba docs: 导航骨架复审修订(ledger R21/R22)
- R21:移除全部 Task 的 installDebug(本机无模拟器/真机),Task 14 人工验收
  明确标注「未执行 —— 无设备」,不得当成已通过
- R22:Task 7 的 5 条 Minor 折进其真正可观测的任务 ——
  Task 9 加 tabRouteFor 归属映射 + DETAIL_PATTERN 常量插值,
  Task 12 把 ?: MetricType.STEP 换成 requireNotNull 并补 RoutesTest(纯 JVM)
2026-09-10 10:58:04 +08:00
cuiluzheng 3d39fd3445 docs: 让 R17 的时钟注入真正可测 + 记录刷新语义(ledger R20)
- MockDataProviderTest 增加两条绝对时间戳断言;只比较 first==second 时,
  两次相邻调用几乎总在同一毫秒内,去掉时钟注入测试照样通过
- MockRingDeviceRepository 类级 KDoc 写明「刷新以 suspend 返回表示完成,
  不靠发射新状态」,避免调用方写成等待下一个不同发射而在 M1 永久挂起
2026-09-10 10:47:43 +08:00
cuiluzheng e43b76efab docs: 修正 Task 7 的 Produces 契约(ledger R19)
Interfaces 段原写 HomeScreen(onOpenDetail, onOpenWorkoutHistory),
但全计划无 onOpenWorkoutHistory 的任何调用点,Task 8 产出的是
HomeScreen(onOpenDetail, modifier, viewModel)。同时 WorkoutScreen/DeviceScreen
的 onOpenHistory/onOpenSettings 实为 Task 9/10 才加入,本任务只注册路由、无人跳转。
2026-09-10 10:45:06 +08:00
cuiluzheng c71c3c32f6 docs: Mock 数据源注入时钟,消除 flaky 断言(ledger R17)
- MockDataProvider 增加 now: () -> Long = System::currentTimeMillis
- metricHistory / workouts 改用 now(),使「确定性」承诺成立
- 测试注入 FIXED_NOW,并补一条时间戳严格递增的断言
2026-09-10 10:40:55 +08:00
cuiluzheng 42bc9fe12e docs: 修正格式化层与占位页的硬编码文案(ledger R13/R14)
- formatCalories 不再拼接「千卡」(与 R.string.home_calories_label 重复),
  workout_detail_calories 改为「消耗 %1$s 千卡」
- stressLevelLabel(String) 改为 @StringRes stressLevelLabelRes(Int),描述进 strings.xml
- Global Constraints 写明唯一豁免(formatSleepDuration/formatDuration 的复合时长值)及判据
- Task 7 的 7 个占位 Composable 改用 stringResource,补齐 import 与 3 条占位文案
2026-09-10 10:32:55 +08:00
cuiluzheng bf983833c8 docs: 豁免设计系统 token 的命名约束(R10) 2026-09-10 10:22:21 +08:00
cuiluzheng ac9019d56a docs: 修正计划示例中的硬编码文案(R9),补齐 stringResource 用法与警示 2026-09-10 10:18:54 +08:00
cuiluzheng 616bd1aea2 docs: 按 pre-flight 冲突扫描修订 M0+M1 计划(R1-R4) 2026-09-10 09:07:56 +08:00
cuiluzheng 9411ac14d1 chore: 新增 agent 技能配置(issue tracker / triage 标签 / 领域文档) 2026-09-10 09:03:52 +08:00
cuiluzheng a1bc2322f3 docs: 新增 M0+M1 实施计划(14 个任务,含 TDD 步骤) 2026-09-10 09:01:41 +08:00
cuiluzhengandClaude Code b8d217e115 docs: 新增智能戒指健康 App 阶段一设计文档
- 仓库拆分:ring-health-app / ring-health-api(阶段一仅契约)
- 技术选型:Kotlin + Compose,工具链钉死本机已装版本
- 架构分层、页面地图、Mock 策略与里程碑 M0-M5
- 厂商 SDK 隔离复用策略(原样 vendor + 自写适配层)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-10 08:43:06 +08:00