[Architect] Refs #204 — apply OQ decisions: diet_pattern (19th), ADR-0002 normalize dose_variants

- OQ-1: dose_variants 정규화 결정을 ADR-0002 로 승격 (ADR-0001 = 왜, ADR-0002 = 어떻게).
- OQ-3: nutrition diet 패턴 5개를 별도 diet_pattern 카탈로그(19번째 SoT)로 분리.
  · 02-catalog §8 신규, 인덱스 IDX_diet_patterns_evidence / IDX_diet_patterns_kfit.
  · 05-seed: diet_patterns.json (5행) 추가, 로딩 순서 끝에 배치.
  · 04-migrations: v1 테이블 합계 = Catalog 8 + User 11 + 부속 1 + meta_kv = 21.
- README §2/§3/§6/§11 갱신: 18→19 SoT, AC-2 에 diet_pattern=5 검증 추가.
- README §12 OQ → Resolved Open Questions 표 (OQ-1~OQ-8 결정 결과).
- habit_dose_variant → habit_dose_variants 표기 통일.
- fn-weekly-minimum-ratio, 03-drift-schema-user 의 ADR-0002 cross-link.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-11 17:13:04 +09:00
parent b8e563176b
commit 29befe4d97
11 changed files with 285 additions and 48 deletions

View File

@@ -6,9 +6,11 @@
| version | 범위 | 작성자 | 비고 |
|---------|------|--------|------|
| **v1** | 18 테이블 + `habit_dose_variants` + `meta_kv` 초기 생성 | Architect (이 설계서) → Developer (구현) | Phase 1 종료 시점 = production v1 |
| **v1** | 19 SoT 테이블 (Catalog 8 + User 11) + 부속 1 (`habit_dose_variants`) + `meta_kv` = **21 테이블** 초기 생성 | Architect (이 설계서) → Developer (구현) | Phase 1 종료 시점 = production v1 |
| v2+ | TBD (Phase 2+) | 해당 시점 Architect | data-model.md §8 의 후속 엔티티 (habit_stack, notification_rule 등) |
> v1 테이블 합계 명확화: **Catalog 8** (protocols, break_protocols, common_frames, methodologies, frame_patterns, reward_menu_items, references, **diet_patterns**) + **User 11** (users, phases, habits, if_then_rules, tracker_entries, lapse_logs, urge_logs, reward_declarations, reward_claims, reflections + ※ habit row 의 정규화 부속 별도) + **부속 1** (`habit_dose_variants` — ADR-0002) + **meta_kv** = **21 테이블**.
규칙:
- schema 가 바뀌면 **반드시 schemaVersion 증가** + `onUpgrade` 콜백 작성.
- 컬럼 추가만은 가능하나, drop/rename 은 destructive — `m.alterTable(TableMigration(...))` 사용.
@@ -18,10 +20,10 @@
```dart
@DriftDatabase(tables: [
// catalog
// catalog (8)
Protocols, BreakProtocols, CommonFrames, Methodologies,
FramePatterns, RewardMenuItems, References,
// user
FramePatterns, RewardMenuItems, References, DietPatterns,
// user (11) + 부속 (1, ADR-0002)
Users, Phases, Habits, HabitDoseVariants, IfThenRules,
TrackerEntries, LapseLogs, UrgeLogs,
RewardDeclarations, RewardClaims, Reflections,
@@ -68,6 +70,11 @@ class AppDatabase extends _$AppDatabase {
'CREATE INDEX IDX_references_kind ON "references"(kind)'));
await m.createIndex(Index('IDX_references_doi',
'CREATE INDEX IDX_references_doi ON "references"(doi) WHERE doi IS NOT NULL'));
await m.createIndex(Index('IDX_diet_patterns_evidence',
'CREATE INDEX IDX_diet_patterns_evidence ON diet_patterns(evidence_strength)'));
await m.createIndex(Index('IDX_diet_patterns_kfit',
'CREATE INDEX IDX_diet_patterns_kfit ON diet_patterns(korean_context_fit) '
'WHERE korean_context_fit IS NOT NULL'));
// user
await m.createIndex(Index('IDX_phases_user_status',
'CREATE INDEX IDX_phases_user_status ON phases(user_id, status)'));