v2.1.1 — trial escape hatch & check-in clarity
Closes out the pre-design-review polish round.
UX
- Blocked start is now actionable — starting a food while another is under observation names the active trial and offers a one-tap 취소하고 시작 (with 닫기 to dismiss). If the observation window elapsed while the alert was open, the finished trial is auto-closed as safe instead of cancelled.
- 테스트 취소 asks first — cancelling an in-progress trial now shows a confirmation dialog before discarding observation days.
- Check-in done-state teaches its cadence — after the daily 이상 없음 tap:
✓ 이상 없음 기록됨 · 오후 2:30+하루 한 번이면 충분해요.
Hardening
cancelTrialcan no longer overwrite a finished safe/reacted outcome via a stale id — the UPDATE is guarded byoutcome IS NULL, with a regression test asserting the generated SQL (proven to fail on the unguarded code).
Gates: TypeScript strict clean · Jest 43/43 · CI green.