diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a64e35..d146631 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,43 @@ 본 프로젝트의 모든 의미있는 변경은 본 파일에 기록한다. 형식: [Keep a Changelog](https://keepachangelog.com/) · 버전: [SemVer](https://semver.org/). +## [0.3.0] — 2026-06-12 + +### Added — Phase 2-A OQ-1 resolved: real Gemma 4 E2B inference (Redmine #218) +- `GemmaLlmService` 본문 구현 — `flutter_gemma` 0.16.5 위에 Gemma 4 E2B 실 추론. `InferenceModel.createChat(modelType: gemma4, supportsFunctionCalls: true, toolChoice: required, tools: [...])` + `collectFunctionCall(stream)` 로 structured JSON 강제. +- `_LazyLlmService` (main.dart) — Mock ↔ Gemma 런타임 어댑터. 매 호출마다 `checkAvailability` 재평가 → opt-in/opt-out 즉시 반영 (앱 재시작 불필요). +- 실 모델 핀: `gemma-4-E2B-it.litertlm` 2.41GB, SHA-256 `181938105e0eefd105961417e8da75903eacda102c4fce9ce90f50b97139a63c` (HF `litert-community/gemma-4-E2B-it-litert-lm`). +- HF_TOKEN `--dart-define` 주입 — 빈 기본값으로 빌드 안전. + +### Added — Device gate (AC-6) +- 플랫폼 채널 `life_helper/device_caps` (`MainActivity.kt` → `ActivityManager.MemoryInfo.totalMem`) — Android 단말 실 RAM 측정. `device_info_plus` 의 `isLowRamDevice` (~1GB) 로는 4GB 임계치 불가하여 채널 도입. +- `DeviceCapabilities` 추상 + `PlatformDeviceCapabilities` 구현 (테스트 주입 가능). `kAiMinRamBytes = 4 GiB`. fail-closed (`null` → false). +- `deviceMeetsAiRamProvider` (Riverpod `FutureProvider`) — `SettingsScreen` 토글 disabled + 안내 문구. + +### Added — Tests +- 88/88 통과 — 신규 10 (`device_capabilities_test.dart` 7 + lazy resolve regression 3). + +### Polish (Designer) +- AC-6 게이트 안내 톤 정렬 — "RAM 부족" → "이 단말에서는 AI 도움을 사용할 수 없어요 (RAM 4GB 이상 필요)". +- `_describe(missing, meetsRam:)` 분기 — 토글 disabled 상황에서 "토글 켜면" 모순 제거. +- 옵트아웃 다이얼로그 "다시 다시" 중복 → "처음부터". + +### Fixed (Reviewer) +- `_LazyLlmService._delegate` sticky cache — 첫 호출 시점의 delegate 종류가 앱 재시작까지 유지되던 버그 (Mock → Gemma 전환 안 됨). re-resolve + (kind + modelPath) 일치 시만 캐시 재사용. +- Reference 문서 nit 3건 — `215-ai-frame-suggest.md` (L184 채널 사실 정정 / L186 F1 follow-up 매핑 / L191 OOS 기준). + +### Release artifact +- `app-release.apk` 286MB, SHA-256 `4a237d5124bfcd56aaa8c0ae89060a9ecf9ce7cc739f0b056ce66e9b9ca6b54a`. + +### Known limitations (deferred to #219~#222) +- **AC-7** (실 단말 cold-start 예산) — DEFER. 실기기 E2E 검증은 본 릴리스 후 권고. +- **#219** F1: 60초 idle auto-unload. +- **#220** GemmaLlmService.load 동시성 가드 + `isThinking:false` 명시. +- **#221** AC-10 한국어 corpus ≥70%. +- **#222** HF_TOKEN keystore 기반 secret 전환. + +--- + ## [0.2.0] — 2026-06-12 ### Added — Phase 2-A: On-device Gemma 4 frame suggestion (Redmine #215) diff --git a/app/pubspec.yaml b/app/pubspec.yaml index a10d9e3..01000cd 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -1,7 +1,7 @@ name: life_helper description: "Huberman + Atomic Habits + Tiny Habits + If-Then. Local-first habit/checklist/todo." publish_to: 'none' -version: 0.2.0+2 +version: 0.3.0+3 environment: sdk: ^3.12.2