[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

@@ -22,9 +22,12 @@ app/assets/seed/
├── methodologies.json # Array<Methodology> — 21 항목
├── frame_patterns.json # Array<FramePattern> — ~30 항목
├── reward_menu_items.json # Array<RewardMenuItem> — ~30 항목
├── diet_patterns.json # Array<DietPattern> — 5 항목 (OQ-3 결정)
└── references.json # Array<Reference> — ~50 항목
```
> 총 **8 시드 파일** (Catalog 카탈로그 1:1). user-data 테이블은 시드 없음.
- 각 파일 형식 = `schema/<entity>.schema.json` 을 만족하는 객체 배열.
- 인코딩 = UTF-8 (한국어 텍스트).
- `pubspec.yaml``flutter.assets:``assets/seed/` 등록.
@@ -33,12 +36,13 @@ app/assets/seed/
```
1. references.json ← 다른 시드가 reference_ids 로 참조
2. protocols.json
2. protocols.json ← diet_patterns 가 linked_protocol_ids 로 참조
3. break_protocols.json
4. common_frames.json
5. methodologies.json
6. frame_patterns.json
7. reward_menu_items.json
8. diet_patterns.json ← protocols + references 참조 (마지막)
```
- 각 파일 batch insert 는 단일 트랜잭션.
@@ -85,8 +89,19 @@ Future<void> importIfNeeded() async {
| methodologies.json | habit-todo-methodologies.md §1~§21 | `###` 헤더 단위 | 21 |
| frame_patterns.json | habit-todo-methodologies.md "흔한 끊기 목표 변환 30선" | 표 row 단위 | ~30 |
| reward_menu_items.json | habit-todo-methodologies.md "권장 리워드 메뉴 30선" | 표 row 단위 | ~30 |
| diet_patterns.json | nutrition/diet-protocols.md §2 | 5 개 식이 패턴 (`###` 헤더 단위) | 5 |
| references.json | 4 SoT 의 각 출처 섹션 합계 | 인용 1 건 | ~50 |
### diet_patterns.json 시드 5 행 (예시 id)
| id | name | 비고 |
|----|------|------|
| `mediterranean` | 지중해 식단 | PREDIMED RCT — evidence_strength=strong |
| `low_carb_keto` | 저탄수/케토 | 당뇨 약물 복용자 medical_warning |
| `tre_if` | TRE / 간헐적 단식 | huberman §1.5 linked_protocol |
| `plant_based` | 식물성 | k_diet 와 starter_levers 일부 공유 |
| `k_diet` | 한식 기반 | korean_context_fit=high, starter '첫 끼 단백질 +30g' |
## 7. 손 작성 vs 자동 추출
본 Phase 는 **손 작성** (Developer 가 SoT 마크다운을 보고 JSON 작성). 이유:
@@ -118,6 +133,7 @@ test/fixtures/seed/
├── methodologies_small.json # 3 항목 (core engine 3 개)
├── frame_patterns_small.json # 2 항목
├── reward_menu_items_small.json # 5 항목 (T0~T4 각 1)
├── diet_patterns_small.json # 2 항목 (k_diet + mediterranean)
└── references_small.json # 2 항목
```