# 작업 보고: task-2949-merge (timer id: task-2949+3)

- 팀: dev2 (오딘 / Odin)
- 일시: 2026-08-14 09:31 KST (merged_at 2026-08-14T00:31:24Z)
- 작업 내용: **InsuRo PR #212 (실손 재작업) squash 병합** — 코드 수정 0, 병합만 수행

## 1. 수행 내역

| 항목 | 값 |
|---|---|
| repo | Jeon-Jonghyuk/InsuRo |
| PR | #212 `task-2949-silson-rework` → `main` |
| 병합 전 head (pin) | `99e1ce1fa95198f8d7a454ccf97f345e722cc18d` |
| 병합 방식 | squash (`merge_method=squash`, `sha` 핀으로 경합 차단) |
| 인가 경로 | 봇 GitHub App 토큰 `BOT_GITHUB_TOKEN` → `gh api -X PUT .../pulls/212/merge` |
| 실행 주체 | `jeon-jonghyuk-taskctl-bot[bot]` |
| **merge commit** | **`1c1bf1c4ebd3aed742de5a7160f1d810a2809363`** |
| **origin/main head** | **`1c1bf1c4ebd3aed742de5a7160f1d810a2809363`** |
| parent | `e0edd6aef51c80f6f825c3441dc1b529763bf741` (단일 부모 = 선형) |
| tree sha | `dea3567bfef2d43c2943ae64a4108f213a75fd45` |

## 2. 병합 전 게이트 확인 (실측)

- `state=open`, `merged=false`, `mergeable=true`, `mergeable_state=clean`, `draft=false`
- head sha = 지시받은 핀 값과 **완전 일치**
- check-runs **11/11 전부 `success`**: ci, ci/guard, guard, qc-check, e2e-test, diagnostic, hidden-path-audit, lock-in-check, merge-safety-check, cancel-kill-switch, gemini-review-gate
- combined status API = `pending` → **legacy status 값으로 오독 금지**(기존 교훈). 실판정은 `mergeable_state=clean` + check-runs 11/11

## 3. 병합 후 독립 검증 (전항목 PASS)

1. `merged=true`, `state=closed`, `merged_at=2026-08-14T00:31:24Z` ✅
2. `git/ref/heads/main` = `1c1bf1c` = `merge_commit_sha` → **origin/main 반영 확인** ✅
3. parent 단일 = `e0edd6a`(직전 main) → squash 선형, 우회 병합 없음 ✅
4. **tree sha `dea3567bfef2d43c2943ae64a4108f213a75fd45`** = 로컬 검증본/ANU 검증본 tree 와 **바이트 동일** → 병합 내용 무결성 확정 ✅
   - (커밋 sha 는 Git Data API 개행 정규화로 로컬과 달라질 수 있어 **tree sha 대조**를 무결성 기준으로 사용)
5. 파일 7개 / +1152 / -178 → PR 명세와 정확히 일치, 추가 파일 혼입 0 ✅

## 4. 변경 파일 (7)

```
modified  +416/-34   server/silson/data/silson_generations.json
modified  +147/-128  server/silson/data/sources/comparison_matrix.json
modified  +5/-4      server/silson/data/sources/manifest.json
modified  +36/-0     server/silson/models.py
modified  +53/-0     server/silson/provenance.py
modified  +11/-4     server/tests/test_silson_analysis_bridge.py
modified  +484/-8    server/tests/test_silson_provenance.py
```

## 5. 테스트 결과

- 병합 전 CI 11/11 success (본 작업에서 재실행 없음 — 코드 변경 0)
- 본 작업 자체는 병합 API 호출 + 읽기 검증만 수행

## 6. ★ 비고 — 잔여 미정정 2건 (병합본에 그대로 존재, 사실 보고)

지시대로 병합은 완료했으나, 이전 ANU HOLD 사유 2건은 **병합본에서 정정되지 않은 상태**임을 실측 확인함.

**(1) `decided_by` 귀속 오기 — 잔존**
`server/silson/data/silson_generations.json` 에 `"decided_by": "회장 판정 (task-2949 재작업, 2026-08-14)"` **2건**. 회장 지시 원문은 "재분석"이며 "판정"이 아님 → 귀속 표기 부정확.

**(2) 매트릭스 resolution 미동기화 — 잔존**
`comparison_matrix.json` 의 `conflicts` **13건 전부 `resolution="primary_wins"`**. 그중
- `conflicts[10]` (GEN3/coverage_limit): primary(A2) value = `... MRI 200`
- `conflicts[12]` (GEN4/coverage_limit): primary(A2) value = `비급여3대특약 좌동`(→ MRI 200 상속)

두 셀 모두 `corrected_representative_value` 필드가 **없음**. 따라서 매트릭스의 기계판독 `resolution` 만 따르는 소비자는 **MRI 200 을 도출**하게 됨.

**대조 — 권위 데이터는 300으로 정정되어 있음**
`silson_generations.json` 의 GEN3 `coverage_limit` = `... MRI 300`, `conflicts[0].corrected_representative_value = "MRI 300"`, `corrections[0]` 에 `previous_value: MRI 200 → corrected_value: MRI 300` 기록 존재. 즉 **대표값 자체는 300으로 확정**되어 있고, 불일치는 매트릭스 `resolution` 필드에 국한됨.

**리스크 평가 (실측 근거)**
`server/` 내 `silson` 패키지 **외부 호출자 0건**(tests 제외 import 0, router 등록 0) → **휴면 모듈, 머지 ≠ 활성화**. 현 시점 고객 대면 경로로 MRI 200 이 노출될 실경로는 없음. 다만 배선/활성화 이전에 위 2건 정정 필요.

**후속 = 회장 결정 필요 (2건)**
- ① `decided_by` 문자열 정정 여부 및 정정 시 대체 문구
- ② 매트릭스 `conflicts[10]/[12]` 의 `resolution` 을 `secondary_corroborated_primary_typo` 로 동기화 + `corrected_representative_value` 추가 여부
- (기존 잔여) stale 원격 브랜치 `task-2949-silson-evidence`(`13aa7c0`) 정리 여부 — 미조치

## 7. 제약 준수

- 코드 수정 **0** (병합 API 호출만)
- force push / force merge **0**
- harness 무력화 **0** — 인가 경로(봇 App 토큰 API)만 사용
- admin merge / branch protection 우회 **0**
