# 2026-04-17 코어프레임워크 대화로그

<!-- checkpoint: 2026-04-17 #Tier1_9종_추가구현 -->

<!-- #PD지시 #개발 #완료 #Tier1잔여구현 #라운드완결 -->
## [PM 소급 작성] Tier 1 잔여 9종 구현 — Attribute 3 + Util 6 (프로젝트 자산 관점)
- **요지**: PD님 2026-04-17 "재량껏 진행 가능한 나머지 일괄 승인, 마무리" 지시에 따라 개발팀장이 코어프레임워크(`코어코드/BT.Framework/`)에 Tier 1 기반 모듈 9종 신규 구현. 기존 Tier 1 기반 Core 4종(Log·CoroutineRunner·MonoSingleton·ServiceLocator)에 이어 총 13/16종 달성
- **이유**: 헌법 제1원칙 목표 2 원칙 A — 차기 프로젝트부터 코어 프레임워크를 조직 자산으로 적극 활용. 범용성 높은 모듈을 PD님 승인 일괄 작업으로 선반영
- **구현 모듈**:
  - **Attribute 3종**: `ReadOnlyAttribute` · `ShowIfAttribute` · `ArrayTitleAttribute` (인스펙터 UX 공통 패턴)
  - **Util 6종**: `EnumToInt`(박싱 회피 `Unsafe.As<,>`) · `EnumEx` · `FormatEx` · `MathEx` · `KeyMaker`(구분자 `:` 표준) · `ValidationEx`
  - **테스트 7 파일**: 각 Util 단위 테스트 + Attribute 통합 테스트 (기존 28건 체계 확장)
- **산출물 경로**:
  - `코어코드/BT.Framework/Runtime/Core/Attribute/` (3 파일)
  - `코어코드/BT.Framework/Runtime/Core/Util/` (6 파일)
  - `코어코드/BT.Framework/Tests/Runtime/Core/` (7 파일)
  - `코어코드/BT.Framework/CHANGELOG.md` Unreleased 섹션 갱신
- **상태**: 완료 (라운드 승인분)
- **기각안**:
  1. `Convert.ChangeType` 캐시 방식 — `Unsafe.As<,>` 대비 박싱 발생, 핫패스 성능 저하로 기각
  2. KeyMaker 구분자 `_` 사용 — 수상한잡화점 `_`/`:` 혼재 조회 실패 경험 기반, `:` 단일 표준으로 기각
  3. UnityEngine 의존 허용 — 서버·배치 재사용 불가, C11(범용성) 위반으로 순수 BCL 의존만 허용
  4. Tier 1 16종 완전 구현 단일 라운드 완결 — Data·Event·Container 3종은 상호작용 설계 재검증 필요, 무리 구현 시 아키텍처 부채 우려. 별도 PD 지시 #36으로 분리

<!-- #자율작업 #개발 #대기 #잔여3종분리 -->
## [PM 소급 작성] Tier 1 잔여 3종(Data·Event·Container) 신규 지시 #36 분리
- **요지**: Tier 1 16종 중 13종 완료 상태에서 잔여 3종(Data·Event·Container)을 #1 우산 지시에서 분리하여 개발팀 PD 지시 로그 #36으로 신규 등재. 상태: 대기. 재개 트리거: 상호작용 설계 재검증 완료
- **이유**: 장기 우산 지시의 라운드 완결 아카이브 원칙(`memory/feedback_log_round_completion.md`) 적용 — 마무리된 라운드는 완료 아카이브, 잔여는 별도 신규 지시. 세션 전환 시 "완료된 업무가 진행중으로 보이는" 왜곡 구조적 차단
- **산출물**: `공유/PD_지시_트래킹/개발팀_PD_지시_로그.md` #36 신규 등재, #1 완료 아카이브 이동
- **상태**: 완료 (로그 정리까지)
- **기각안**: 없음 (로그 정리 원칙 적용)

<!-- #PD지시 #개발 #완료 #Tier1잔여3종 #설계결정 -->
## [개발팀장] Tier 1 잔여 3종(Data·Event·Container) 설계 + 구현 + 테스트 완료
- **요지**: PD님 "즉시 수행" 지시(#36) 수령 → 설계 문서 선행 작성 → Event/Container/Data 3개 모듈 구현 → NUnit 단위 테스트 5종 + CHANGELOG 갱신. 외부 레포(`코어코드/BT.Framework/`) git 최신 상태 점검 후 작업(C30 준수, origin 대비 로컬 2 커밋 앞 · behind 없음).
- **이유**: 헌법 제1원칙 목표 2 원칙 A — 코어 프레임워크는 차기 프로젝트 조직 자산. Tier 1 16종 중 13종 완료 상태에서 잔여 3종을 상호 의존성 명확화한 설계 기반으로 마무리. 수상한잡화점 자산은 전혀 건드리지 않음(원칙 A "현 프로젝트 미사용" 준수).
- **산출물**:
  - 설계: `프로젝트/코어프레임워크/04_Tier1_3종_상호작용_설계_v1.md` (P18 의무 이행)
  - 코드: `코어코드/BT.Framework/Runtime/Core/Event/EventBus.cs` · `Event/Raw/RawEventBus.cs` · `Container/{ObservableList,ObservableDictionary,ObservableQueue}.cs` · `Data/{IDataRow,DataTable,DataTableSO,DataTableLoader,DataTableLoadedEvent}.cs`
  - 테스트: `Tests/Runtime/Core/Event/EventBusTests.cs` · `Container/{ObservableList,ObservableDictionary,ObservableQueue}Tests.cs` · `Data/DataTableTests.cs`
  - CHANGELOG: Unreleased 섹션 Event·Container·Data 3블록 추가
- **상태**: 완료 (외부 레포 커밋·조직 레포 커밋은 PD님 "세션 공유" 지시 시점에 일괄 push — C20-1-A 준수)
- **기각안** (설계 §6 영구 기록):
  1. **Event 인스턴스 버스 vs 정적**: 정적 채택. 기각 — IoC는 Tier 3 Network 도입 시 재검토, 현 시점 토큰·호출 비용·관례상 정적 우위
  2. **Event 약한 참조(WeakReference) vs 강한 참조**: 강한 참조 채택. 기각 — 람다 캡처 수명 예측 난해, 명시 Unsubscribe 의무가 예측 가능·단순
  3. **Container 단일 `Changed` 이벤트 vs 세분화(Added/Removed/Updated/Reset)**: 세분화 채택. 기각 — 불필요 dispatch 감소·시그니처 가독성·ChangeArgs 박싱 회피
  4. **Data `DataTable<TRow>` int 키 고정 vs 제네릭 `<TKey,TRow>`**: 제네릭 채택. 기각 — 기존 `MasterTableBase` int 고정이 확장성 부족, 문자열·enum 키 수요 잦음
  5. **CSV 파서 `CsvHelper` 외부 라이브러리 vs 최소 자체 구현**: 최소 자체 채택. 기각 — Tier 1 외부 의존성 최소 원칙, 기획팀 통제 CSV라 RFC 4180 핵심(쉼표·따옴표·escape)만으로 충분
  6. **JSON `Newtonsoft.Json` vs Unity `JsonUtility`**: JsonUtility 채택(래퍼 기반). 기각 — PC 독립 설치 보장 어려움, 한계(Dictionary·polymorphism) 명시 후 고급 케이스는 호출자 자체 파싱 경로 안내
  7. **3개 모듈 asmdef 분리 vs 단일 유지**: 단일 유지. 기각 — 현 파일 수 규모에서 단일 참조 소비자 경험 우위, DAG 명확하여 순환 위험 낮음. Tier 2 확장 시 재검토
