- plan: flip 43 checkboxes done across Task 1-7/9; Task 8 (manual speed baseline) and Task 10 (this retro) intentionally left open - CLAUDE.md §8: AI/ ⚠️ partial (AIRuntime/LLMSession/ModelStore/TokenChunk done, VLSession/Prompts/ pending); FileVault ✅; add Debug/DebugAIRunner ✅; drop bold from "W2 当前" and tag W2-W3 row 进行中 - new retros/2026-05-31-w2.md: status table, TBD speed baseline, off-plan Symptom/Timeline/ArchiveListView/AppIcon/Swift6 cleanup, Swift 6 + Simulator sandbox learnings, W3 prep checklist
3.1 KiB
3.1 KiB
W2 Retro · 2026-05-31
范围:2026-05-19(W2 起)→ 2026-05-25(W2 中段写,W3 周一前回看修订)。本次 retro 在 W2 中段写,主要是周末批量收尾的留痕。
Status
| 风险/里程碑 | 状态 | 备注 |
|---|---|---|
| R1 · MLX 跑通 | ⚠️ 部分通过 | LLMSession.load 通过 Swift Testing 烟测,真实 tok/s 待用户手动 DebugAIRunner 验证 |
| R4 · Schema 迁移 | ✅ 通过 | 5 + 1(Symptom)个 @Model,3 + 2 个关系烟测全绿 |
| 本周里程碑 · AI 基座骨架 | ✅ | AIRuntime / LLMSession / ModelStore / FileVault 全部交付,build 干净 0 warning |
速度基线
- 模拟器(iPhone 17 Sim, Apple Silicon Mac):TBD(W3 周一前由 xuhuayong 在 macOS Designed for iPad 内点 DebugAIRunner 填入)
- 真机 iPhone 15+:待 W3 验证(本周未连真机,模型只 sideload 到 macOS sandbox)
验收门槛:模拟器 < 5 tok/s 触发 R1 红线(换 llama.cpp,W2 plan revert)。当前烟测路径无法测速,需 manual。
计划外完成
- Symptom 模块:新增 @Model + Start/End sheets + OngoingSymptomsCard。这是 CLAUDE.md §10 红线 #6 "新功能必须问'清单里有吗'" 的例外,由产品负责人决定加入。
- Timeline 统一时间线:TimelineEntry + TimelineRow + DateSection + TimelineGrouping,被 HomeView 和 ArchiveListView 共享。
- ArchiveListView 提前打底(原计划 W4):接 @Query 拉 Indicator/Report/Diary/Symptom,filter chips + 年/月分组 + 空态。
- AppIcon:Light/Dark/Tinted 三套 9 sizes + SVG 源。
- Swift 6 并发清扫:
SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor下,把 ModelStore / FileVault / ModelKind 显式标 nonisolated,LLMSession 用 task-scoped Device.withDefaultDevice 替代 deprecated API。
计划内缺口
- Task 8 Step 1-2 自检与速度基线:延后到用户 manual 验证。
- Task 8 Step 3 真机连测:延后到 W3。
- Task 10 Step 2 §8 状态更新:已在本 retro commit 内一起完成。
学到的
SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor会把跨边界类型/方法都默认推到 MainActor,跟 actor (如 AIRuntime) 互操作时必须显式nonisolated整条调用链。@unchecked Sendable不自动解锁实例方法的 isolation。- iOS Simulator app sandbox 阻止读 Mac 用户目录,集成测试无法直接验证真实推理;Mac Designed for iPad 又卡 code signing。W3 把 LLM 接口拆 SPM target 后才能写 host-fs 集成测试。
Device.withDefaultDevice是 TaskLocal,跨 actor 传递正常,但跨 Task(如 AsyncStream 的 detached Task)需要在 inner Task 内重新withDefaultDevice。- MLX Swift API 比 mlx-swift-examples 文档稳定,真正卡的是 Swift 6 并发系统,不是 MLX 本身。
下周(W3)前置准备
- 用户在 macOS App 内点 DebugAIRunner,把实际 tok/s 填进本 retro 的"速度基线"段
- 准备 5–10 张真实化验单照片(W4 VL 回归测用),放进 ~/tiji-models/test-reports/
- 准备 20 条危险问句(W3 末医疗话术安全测试)
- 决定是否把 LLM 接口拆 SPM target(便于真实推理集成测试)
- W3 plan 周一动笔,把 Symptom + Timeline 写进 spec