Files
kangkang/docs/superpowers/retros/2026-05-31-w2.md
link2026 b80fae35c9 docs(w2): mark plan tasks 1-7/9 done + sync CLAUDE.md §8 + write W2 retro
- 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
2026-05-25 23:36:16 +08:00

3.1 KiB
Raw Permalink Blame History

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 内一起完成。

学到的

  1. SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor 会把跨边界类型/方法都默认推到 MainActor,跟 actor (如 AIRuntime) 互操作时必须显式 nonisolated 整条调用链。@unchecked Sendable 不自动解锁实例方法的 isolation。
  2. iOS Simulator app sandbox 阻止读 Mac 用户目录,集成测试无法直接验证真实推理;Mac Designed for iPad 又卡 code signing。W3 把 LLM 接口拆 SPM target 后才能写 host-fs 集成测试。
  3. Device.withDefaultDevice 是 TaskLocal,跨 actor 传递正常,但跨 Task(如 AsyncStream 的 detached Task)需要在 inner Task 内重新 withDefaultDevice
  4. MLX Swift API 比 mlx-swift-examples 文档稳定,真正卡的是 Swift 6 并发系统,不是 MLX 本身。

下周(W3)前置准备

  • 用户在 macOS App 内点 DebugAIRunner,把实际 tok/s 填进本 retro 的"速度基线"段
  • 准备 510 张真实化验单照片(W4 VL 回归测用),放进 ~/tiji-models/test-reports/
  • 准备 20 条危险问句(W3 末医疗话术安全测试)
  • 决定是否把 LLM 接口拆 SPM target(便于真实推理集成测试)
  • W3 plan 周一动笔,把 Symptom + Timeline 写进 spec