# 03 · prod ↔ stg 발산 현황

이 문서는 **커밋 단위 발산의 정본**이다. `prod` 팁에만 있는 커밋과 동결 `stg` HEAD 에만 있는
커밋을 전건 싣고, 그 위에 **이 문서가 내리지 못하는 판정 두 개**를 이름으로 남긴다.

값은 전부 `docs/_meta/index/releases.yaml` 과 `docs/_meta/index/commits.<repo>.jsonl` 에서
유도했고, 두 버킷은 3저장소 git `rev-list` 로 재유도해 대조했다. 인덱스는 생성물이므로
**생성물만 보면 생성기 결함이 그대로 통과한다** — 그래서 원천인 git 이 대조 상대다.

> **정책 단위 발산은 이 문서 소관이 아니다.** `prod-hotfix-unreconciled` 배치가 `body`(본문 수록 +
> 불일치 경고)이고 `staged-only` 가 `appendix`(부록 격리)인데, 그 수록은 형제 PRD 소관이다.
> 여기는 커밋 단위 현황의 정본이지 정책 단위 배치의 정본이 아니다.

---

## 기준점

`measured_at` 은 prod 팁 3개의 author date 중 최댓값이고 실행 시각이 아니다. prod 쪽 기준은
`releases.yaml` 이 잠근 SHA 이며 stg 쪽 기준은 `extraction-manifest.yaml` 의 동결 HEAD 다.

| 항목 | 값 |
|---|---|
| `measured_at` | `2026-08-05T16:02:26+09:00` |
| locked prod tip · `insuniverse-server` | `2d3b238e8e8feea176d828ea21c4b215a711dd3b` |
| locked prod tip · `insuniverse-site` | `4fccdd75f8b35d45412b67adef169c45b81ef613` |
| locked prod tip · `insuniverse-admin` | `8dc62b9f8c25266b501a65aa4d1cacf7eec787b3` |
| frozen head · `insuniverse-server` | `4d798f55f021d93c889725e50f18cbce20272fd1` |
| frozen head · `insuniverse-site` | `767d1e441637b5cba759acbe1f928a47f17397eb` |
| frozen head · `insuniverse-admin` | `fb001e1d26d342130cf9a8dc8fe5e8a64e1da9c8` |

### 로컬 `refs/heads/prod` 는 기준이 아니다

재유도는 **locked SHA 로만 재현된다.** 로컬 `refs/heads/prod` 를 쓰면 값이 갈린다 — 실측상
server·site 의 로컬 ref 는 이미 이동했고 admin 은 로컬 브랜치 자체가 없다
(`refs/remotes/origin/prod` 만 있다). 관측을 그대로 적는다.

| 저장소 | 로컬 `refs/heads/prod` | 상태 |
|---|---|---|
| `insuniverse-server` | `5c14fd70293ff802a92a594f177a9df20908654d` | 이동 |
| `insuniverse-site` | `a79528c21bf71a5ba65d3f883fc036c8beee3d00` | 이동 |
| `insuniverse-admin` | — | 부재 |

어휘: `일치` = locked prod tip 과 같다 · `이동` = 실재하지만 다르다 · `부재` = 로컬 브랜치가 없다.

### 두 버킷의 era

두 버킷은 **전건 Era B** 다. Era A(2024~25) 는 자유형식 제목이라 추출 축이 파일경로 기반인데,
이 문서에는 그 축에 해당하는 커밋이 0건이므로 Era A 추출 축이 적용되지 않는다.
era 경계는 리터럴이 아니라 인덱스에서 유도한다 — Era A 최대 날짜 `2025-12-31T09:34:00+09:00` · Era B 최소 날짜 `2026-01-02T09:38:46+09:00`.

| 버킷 | Era A | Era B |
|---|---|---|
| prod-only | 0 | 102 |
| stg-only (인덱스 수록) | 0 | 150 |

---

## prod-only — prod 에만 있는 커밋 102건

`rev-list <locked prod tip> --not <frozen head>` 의 결과다. 이 버킷이 인덱스에서
`prod-hotfix-unreconciled` 로 떨어지고 그 배치는 `body`(본문 수록 + 불일치 경고)다 —
**다만 정책 단위 수록은 형제 PRD 소관이고 이 문서는 커밋 단위 현황만 싣는다.**

sha 는 40자리 전체를 쓴다. 단축형이 집합 대조 단위가 되면 절단 길이가 어떤 검사도 보지
않는 계약이 된다.

### insuniverse-server — 51건

| sha | 날짜 | 제목 |
|---|---|---|
| `2d3b238e8e8feea176d828ea21c4b215a711dd3b` | 2026-08-03T18:50:38+09:00 | feat(report): add internal preview recipient |
| `19916ad08de89f829c8ac1636d6642f44ff8dd19` | 2026-08-03T18:47:11+09:00 | feat(report): split Samsung usage by order |
| `c873dd196b92b68c8d165c36ea592d63ac6d3708` | 2026-07-28T19:41:25+09:00 | fix(security): 투약·검사 추천 조회에 소유자 검증 추가 |
| `6c60afd1f38bdf6673568a28ae0a22d9e90e4ed7` | 2026-07-28T19:30:52+09:00 | fix(security): 병력분석·가망고객 조회에 소유자 검증 추가 |
| `a490c30507f4a21edc8f9ceb6a6ec1281b513566` | 2026-07-28T19:09:55+09:00 | fix(security): 분석·청구서 조회에 소유자 검증 추가 — 비인증/타계정 열람 차단 |
| `85ce2859ada342b6086e27895ecee873d1459838` | 2026-07-27T10:33:53+09:00 | test(subscribe): 구독실패 재구독 순차화 유닛테스트 추가 |
| `b5f1ff417234a7dc60192b516b831a578f7be148` | 2026-07-27T09:56:31+09:00 | test(fc): settleInBatches 스펙을 순차(BATCH_SIZE=1)에 맞춤 — maxActive 5→1 |
| `db4c6e1726d81a197190ea40830095383ca5a8b3` | 2026-07-27T09:53:11+09:00 | fix(subscribe): 구독실패 재구독도 순차화 — 무제한 병렬 → settleInBatches(계약행 데드락 제거) |
| `58f653cf604ae52b599253c58195dde0d05fa180` | 2026-07-27T09:43:52+09:00 | fix(fc): 구독 일괄처리 순차화(BATCH_SIZE 5→1) — 계약행 데드락 제거 |
| `361e61d010edfe27d4d1a67e1000adf648776044` | 2026-07-24T10:53:15+09:00 | fix(analyze): hide Samsung patient name in disease PDF |
| `01c2d06c25a5abeb301fcff5117ea1806d3d1abe` | 2026-07-23T20:38:12+09:00 | fix(report): exit Samsung scheduler task |
| `a670f22d0bd284dccf5d1e9138f73b08d477706e` | 2026-07-23T18:00:01+09:00 | fix(report): lock Samsung report recipients |
| `e5c14c0b907f036334f1e06382d5f6959ff4b510` | 2026-07-23T17:58:28+09:00 | feat(report): add dedicated Samsung report tasks |
| `4e4ddbb211b076a3b30fc5ba482cc0584fb4b818` | 2026-07-23T17:47:31+09:00 | fix(report): isolate Samsung report storage |
| `ef6a613c73198c768d60b1b0fb313f81bc46dbcd` | 2026-07-23T17:40:46+09:00 | feat(report): stage Samsung S2 delivery |
| `85ccc7ba26705edd50f3c89a325c1c37f22ca93f` | 2026-07-23T17:24:15+09:00 | feat(report): email Samsung S2 daily usage |
| `3923b9c9cee916b9599352c37ffdeef770397ca2` | 2026-07-23T14:40:53+09:00 | feat(treat-monitor): 진료집계 스타일 엑셀 다운로드 엔드포인트 |
| `910054cab19fc1d77cfd2b07be58fa8f052b17b3` | 2026-07-23T14:27:10+09:00 | perf(treat-monitor): 진료집계 쿼리 최적화 — 상관 서브쿼리를 실패 주문에만 |
| `ebf71fcb8408ac8ae36919d74f923e740a8a72b3` | 2026-07-22T16:28:36+09:00 | fix(analyze): expose car visibility timestamp |
| `08e39825b7b39569a984cd3034f5af96d0469937` | 2026-07-22T15:59:49+09:00 | fix(analyze): deny car access without owner |
| `dc1d310d090fa75dbc22d7e84987ea07790a0bc7` | 2026-07-22T15:55:27+09:00 | fix(analyze): show new car results to FCs |
| `2639a6f932caff86e49928dba2c49e4ad2f5ae89` | 2026-07-22T15:46:22+09:00 | fix(client): move car visibility cutoff to 16:00 |
| `3bc00a93770b2b17962d3952de6c60d8c13082fe` | 2026-07-22T14:51:36+09:00 | fix(client): hide car results before public cutoff |
| `d8526a7e3894c6dd096ed0f911c6e76348f32b60` | 2026-07-21T14:05:52+09:00 | feat(treat-monitor): 일별 집계 grain에 vendor 추가 — 벤더별 시도+코호트 분해 |
| `d77447e320b569b1f43f77e8cc2e0b814cd4da40` | 2026-07-21T13:53:15+09:00 | feat(treat-monitor): 일별 집계에 grain(일/월) 추가 — 월 단위도 시도+코호트 동일 집계 |
| `f1e0d51ab9f73f45a92619ba2c18e4d8da36afa6` | 2026-07-21T11:33:16+09:00 | feat(treat-monitor): 일별 총합계 집계 추가 — 시도기준+고객 코호트 회복, 기업상품 다중필터 |
| `39db2b1a83b2cbd3a480c3bb214c445962605058` | 2026-07-22T10:54:17+09:00 | fix(fc): make subscription uploads bounded and awaited |
| `161e9e46ee03f3e49f162f7b036fd8f2b1a174ae` | 2026-07-21T15:43:09+09:00 | feat(fc): 이벤트 팝업 [다음에] 96시간 스누즈(계정별, Redis TTL) |
| `32dcba60a2e2341fc4b4cbc793f21c0b559c5161` | 2026-07-21T10:59:12+09:00 | feat(treat): collect car history from coocon and octover |
| `8902dd834a6e5c9cb2cdf92b60aa647dbb48d161` | 2026-07-20T10:17:33+09:00 | fix(car): fail closed outside inhouse canary |
| `c67d6752afb507da13592f8653c888ab76053df2` | 2026-07-20T10:05:36+09:00 | feat(car): gate inhouse canary behind master kill |
| `c9ca4918172a4b265fdc7a0b3b6219d143d57bae` | 2026-07-16T15:01:56+09:00 | fix(task-683): 기관 사용중지 시 분석 초대 서버 차단 |
| `a901babe097eebe6ea49babe879af3ec53a7f583` | 2026-07-16T10:40:49+09:00 | fix(task-684): 기업별 약관을 기본 약관 타입별로 관리 |
| `81d55aa50dfd8bc3b666382a636844eb8190ce66` | 2026-07-20T10:03:42+09:00 | fix(car): gate visibility with signed admin claims |
| `9445cd82677f06d7772e206acb6e9ca28cfa8c2f` | 2026-07-16T09:45:57+09:00 | fix(treat): serialize collection against auth expiry |
| `2b965ec87bf0671c18e1d28822e1a55d3c1ca069` | 2026-07-15T11:31:11+09:00 | feat(analysis): 30일 투약 상세에 진단정보 추가 |
| `e6446b1942c2a473c2bb22c0d5b98beb33f92b94` | 2026-07-13T14:43:53+09:00 | feat(treat-monitor): 월 집계를 벤더사별로 분해 |
| `55597ace144344288fab87dd1815f5836ae88ff5` | 2026-07-13T14:09:43+09:00 | fix(corp-contract): 회계팀 이메일 필수값 해제 |
| `1ec8454b3c1a9a3ea89694e269d1ebfb33afd6d4` | 2026-07-13T13:32:52+09:00 | feat(treat-monitor): 실패를 유저실패(휴먼)/시스템실패로 3분류 통일 + 소요/타임아웃 제거 |
| `7f31d31a4ed83ac47c2f9e77b841f577623c83d7` | 2026-07-13T12:54:50+09:00 | fix(treat-monitor): 이탈을 처리시점(실패) 창으로 통일 — 이탈 ⊆ 실패 정합 |
| `f3671ebe4a7b20ca43add69ba4326bd77b646760` | 2026-07-13T11:48:43+09:00 | feat(treat-monitor): 월 단위 집계 엔드포인트(온디맨드 + 월별 캐시) |
| `7214681efb3adc61ff6ccf5de3db889d46ca1175` | 2026-07-13T11:20:52+09:00 | feat(treat-monitor): 이탈 정확분류(진짜이탈 vs 시스템실패) + 업체별·처리추이 반영 |
| `fb843a550bced82cad959e2d6c7919c54539950b` | 2026-07-13T10:45:45+09:00 | feat(treat-monitor): 보유 이탈 funnel(주문 단위) 신설 + overview 캐시/single-flight |
| `779eec9a5da2632c1aae8c19278cb22165176320` | 2026-07-13T10:24:21+09:00 | chore: merge conflict |
| `c9c92e0f3757163c53009a20754736606aac1292` | 2026-07-12T20:58:39+09:00 | fix(analyze): 보유 분석 상세 basic 조회를 basic PK로 필터 |
| `71233d0ce0d4ca057b3c302f11aea907a8dd2114` | 2026-07-12T18:26:08+09:00 | fix(alimtalk): reject unknown invite codes |
| `c58a17f7c1a1cccf179ca8653d79931d4ce96110` | 2026-07-12T17:48:22+09:00 | fix(treat): expire stale certify resumes |
| `c18123fefc0f8c3adbcc5c7610bfc9a6452d89e4` | 2026-07-12T16:45:30+09:00 | fix(treat): align resume with parked slot ttl |
| `419fea27bea34bc8709b5965d4e617c0aaf712a4` | 2026-07-12T03:17:24+09:00 | fix(treat): resume interrupted certify requests |
| `ca245525c151eb179576701d59e376670d95c7f2` | 2026-07-08T04:42:12+09:00 | fix(b2c): bind treat result to order detail |
| `7629c7fa47bfa1d2a07c3c8564a43442c83b87c3` | 2026-07-07T15:42:29+09:00 | fix(analyze): require B2C result auth |

### insuniverse-site — 27건

| sha | 날짜 | 제목 |
|---|---|---|
| `4fccdd75f8b35d45412b67adef169c45b81ef613` | 2026-08-05T16:02:26+09:00 | feat(analytics): add prod Google tag |
| `40da255ff552a1214402b0ad289a77f29dddc277` | 2026-08-04T14:43:43+09:00 | fix(analysis): preserve current tab during title sync |
| `4fdb161cbb627422bf95a1e74d07db4789c29853` | 2026-08-04T14:39:51+09:00 | fix(analysis): preserve selected result tab |
| `0ae06c9f61a8a4f2fc837e3dcc7a1e1ed27ec4a2` | 2026-08-04T13:42:40+09:00 | fix(analysis): reset B2C entry to car tab |
| `2e7ab885a27669231bb3f744e34a4cc66f3c9ea3` | 2026-08-04T13:35:11+09:00 | fix(analysis): reset result entry to car tab |
| `b7707de76b4aceff1bab4ebeaac11b913a7e7089` | 2026-08-04T13:26:26+09:00 | fix(analysis): show car tab for all results |
| `6b8fbdadde9e877fba4e1d7263303b87d52adb16` | 2026-08-04T13:07:32+09:00 | fix(analysis): select car tab on result entry |
| `90cee73f74640239a04fa2172d4e70a8424a237b` | 2026-08-04T13:06:19+09:00 | fix(analysis): wait before car tab fallback |
| `b256260b21d7a8cd9288231a01fa03b95363553c` | 2026-08-04T11:18:42+09:00 | fix(analysis): default result tab to car injury |
| `8e0a781da690f704a94c22911eff2829da695c32` | 2026-07-27T13:17:34+09:00 | fix(alimtalk): clarify authentication wait time |
| `943f6de677c1b59a68a79d3a782bbe0f0cf80848` | 2026-07-24T10:53:15+09:00 | fix(analysis): omit masked patient name from disease PDF |
| `f45e6091d1551c7f25d960353c34b6ebbed1f79f` | 2026-07-23T16:52:46+09:00 | fix: 프로필 카드 반응형 배치 개선(모바일 2줄, PC 긴 이름 2줄 전환) |
| `127f2cad98d7e840d99a292692516357802106b4` | 2026-07-22T16:29:08+09:00 | feat(analysis): show new car results to FCs |
| `d3afc17a9b04c0f7c4ad3f14c501482f51743f7b` | 2026-07-21T15:47:35+09:00 | fix(push-consent): [다음에] 96h 서버 스누즈(계정별·웹/앱 공유) |
| `3699771eea329fa5ffc07f13c01852dfa85f09dc` | 2026-07-20T21:40:32+09:00 | fix(car): restore authorized admin tabs |
| `8c89515744fe79710e9e44c9336bd9beeeb3b0e9` | 2026-07-16T16:39:02+09:00 | fix(task-683): 일시중지 팝업 문구와 닫기 위치 수정 |
| `b6fec78d2b041f6e4064617b093fe5fdbb3b0d6b` | 2026-07-20T10:13:45+09:00 | fix(task-683): 운영 구조에 사용중지 초대 차단 포트 |
| `ebef9c668afb06fd582a8c90a1679a86515eaeeb` | 2026-07-16T11:19:27+09:00 | fix(task-683): 서비스 사용중지 진입 범위 수정 |
| `a2dad8e60ca153e6c8d1cd15c3c7fd28f0022816` | 2026-07-16T10:40:49+09:00 | fix(task-684): 기업별 약관을 기본 약관 타입별로 관리 |
| `3ab292248f7abeb138fd95ffecec0defbed5bab0` | 2026-07-16T09:50:42+09:00 | fix(task-729): 모바일 푸터 드롭다운 명칭 변경 |
| `a371b8a154d1697dfd64351f5409d6f10d5be5b0` | 2026-07-20T10:08:26+09:00 | fix(car): show B2C tab only from signed admin hint |
| `886b998fbb4826d78f9c47481614e95fb3223b27` | 2026-07-15T11:31:11+09:00 | feat(analysis): 30일 투약 상세에 진단정보 추가 |
| `d0f9afc59a73e23a693ec2a9c372ee21d57895aa` | 2026-07-13T09:32:39+09:00 | fix(alimtalk): certify 제출 이후 화면 뒤로가기 차단 (재전송·세션만료 방지) |
| `8a403d363b44d93d17cee506af917fe973ca9c5a` | 2026-07-12T20:28:35+09:00 | fix(alimtalk): hide form until invite check |
| `72a749c1373e0da421a94bc7cac22abd49841a3c` | 2026-07-12T17:56:14+09:00 | fix(alimtalk): reject expired certify resumes |
| `ae9af4ca7dfe679c6d8d63eedaac355cc1711b33` | 2026-07-12T16:45:53+09:00 | fix(alimtalk): follow certify session expiry |
| `0c6202213ccba77967e17bad6ffa9df07557cbce` | 2026-07-12T03:19:10+09:00 | fix(alimtalk): recover interrupted authentication |

### insuniverse-admin — 24건

| sha | 날짜 | 제목 |
|---|---|---|
| `8dc62b9f8c25266b501a65aa4d1cacf7eec787b3` | 2026-07-23T16:11:19+09:00 | feat: 목록 상태값 글자색 prod 포팅 — 이전 기획분 색상 + 푸시 발송상태 |
| `4b476a49aa6a8065ba4566bd6a1dff7cf674bf47` | 2026-07-23T15:45:20+09:00 | feat: 일반고객관리 회원타입·기업머니관리 계약종료여부 글자색 적용 |
| `744dbf6f442b06df0861f1d04a0639c4b750694a` | 2026-07-23T15:26:07+09:00 | feat: 관리자 목록 상태값 글자색 일괄 적용 (2026-07 기획) |
| `05e429523d514f17982998c03dac50d62bc36cfa` | 2026-07-23T15:51:55+09:00 | feat: 목록 상태값 글자색 공용 statusText 헬퍼 추가 |
| `48cfabca765553c14f6ef2c71a8714146a1ae62a` | 2026-07-22T15:54:15+09:00 | feat(treat-monitor): 일별 총합계 UI(일/월/vendor grain, 기업상품 다중필터) |
| `de8d4f6464406f346af01224029d69ba768fb673` | 2026-07-20T21:40:32+09:00 | fix(analysis): restore iframe detail routes |
| `eacc91949ff59c004043551db8e4e6989f82e25b` | 2026-07-16T15:01:56+09:00 | fix(task-684): 약관 편집기 표시 개선 |
| `f8c5734790217c18ecdcfee56499d09966ca4613` | 2026-07-16T11:19:27+09:00 | fix(task-683): 이미지 팝업 권장 크기 안내 |
| `c8963567bd9e057af4eaa9113648e8693932f994` | 2026-07-16T10:40:49+09:00 | fix(task-684): 기업별 약관을 기본 약관 타입별로 관리 |
| `6ff8ec297a0ec4f8b7e4e9655b589f79b4d559b8` | 2026-07-20T10:07:38+09:00 | fix(car): restrict automobile analysis visibility |
| `e92390a7139ada0c709313be61411aa21a369b01` | 2026-07-14T17:24:02+09:00 | fix(treat-monitor): show rates for every outcome |
| `841d7fe9c37f4e41600c03dfdda866008c6ec4d4` | 2026-07-13T17:07:47+09:00 | fix(corp): 기업관리자 메뉴 회원관리>기업회원관리만 노출 |
| `950a98a24ef6bb3b75d161d1772d00bc27dfdd2d` | 2026-07-13T16:56:02+09:00 | fix(corp): 기업회원 신규등록 소속조직 필수 해제 |
| `69beaae9a9a5b804a93e3848fed47f1630ae53d0` | 2026-07-13T15:35:07+09:00 | fix(corp-product): 기업구독상품 판매가격 0원 입력 허용 |
| `fc6a71d3d5ed69bc37af50d3ab6d18b90686866f` | 2026-07-13T14:44:01+09:00 | feat(treat-monitor): 월 집계 표를 벤더사별 행으로 분해 |
| `43b181e5d456e2a2e63bcf59ff69e899a50ab116` | 2026-07-13T14:10:42+09:00 | fix(corp-contract): 회계팀 이메일 필수값 해제 |
| `de0c3af0b1de800ce896c6a8afc365bf573a31e0` | 2026-07-13T13:52:49+09:00 | fix(treat-monitor): 업체별 단가 컬럼 제거 (운영 반영) |
| `da707b6eed3180b596b6f8de28a4aea0ace40aa4` | 2026-07-13T13:35:20+09:00 | feat(treat-monitor): 실패 3분류(이탈/유저실패/시스템실패) + 소요/타임아웃 컬럼 제거 (운영 반영) |
| `bc5b10822957d8407b13e101c5e4210729ceeb66` | 2026-07-13T12:56:57+09:00 | fix(treat-monitor): 업체별 실패=총실패−이탈 분리 + 처리추이 이탈 스택막대 (운영 반영) |
| `cbf9488f4d3b66976ffaeb9ad546edf7013998b0` | 2026-07-13T12:20:07+09:00 | feat(treat-monitor): 운영 반영 — 이탈 정확분류/보유 funnel/월 집계/캐시/UI 정리 |
| `c19a6d13374909916a098288d08e770ded4de9e4` | 2026-07-13T10:25:35+09:00 | chore: merge conflict |
| `9ea0142567c01d23dccbc5dd5129cc5c2bc83f3c` | 2026-07-09T09:24:42+09:00 | Merge branch 'prod' of https://github.com/rstful/insuniverse-admin into prod |
| `b951f344f70b120d4889603e77edb6975383872b` | 2026-07-08T18:56:30+09:00 | fix(treat-monitor): overview 폴링에 in-flight 가드 추가 |
| `32e86bb124fc8e12cd2c493b084cefc2d37d289d` | 2026-07-08T16:23:46+09:00 | fix: Windows 대소문자 충돌 유발하는 중복 src/pages/sales(소문자) 디렉토리 제거 |

---

## stg-only — 동결 stg HEAD 에만 있는 커밋 150건 (인덱스 수록분)

`rev-list <frozen head> --not <locked prod tip>` 의 결과 중 `commits.<repo>.jsonl` 에 수록된
분이다. 전체 155건 = 수록 150건 + 미수록 5건 이며 미수록분은 다음 절에 따로 둔다.
이 버킷이 인덱스에서 `staged-only` 로 떨어지고 그 배치는 `appendix`(부록 격리)다.

### insuniverse-server — 64건

| sha | 날짜 | 제목 |
|---|---|---|
| `02c4103a827f715a9caf748258af97b3221f73dc` | 2026-07-20T10:17:33+09:00 | fix(car): fail closed outside inhouse canary |
| `044fb0d7f6f79c46c2f39ecc33a4de2917e6af28` | 2026-07-28T19:30:52+09:00 | fix(security): 병력분석·가망고객 조회에 소유자 검증 추가 |
| `05012ffb591a2fa842c3265b82ef5c4beaa4e41f` | 2026-07-23T17:24:15+09:00 | feat(report): email Samsung S2 daily usage |
| `0ba5dd0662121da05719ce9d6f4667ca715d2040` | 2026-07-13T11:48:43+09:00 | feat(treat-monitor): 월 단위 집계 엔드포인트(온디맨드 + 월별 캐시) |
| `164524c2c52a4792f293d99363d300b25cef74c1` | 2026-07-27T09:43:52+09:00 | fix(fc): 구독 일괄처리 순차화(BATCH_SIZE 5→1) — 계약행 데드락 제거 |
| `1c866df4305e93940c8849e310b5385e362c36de` | 2026-07-13T12:54:50+09:00 | fix(treat-monitor): 이탈을 처리시점(실패) 창으로 통일 — 이탈 ⊆ 실패 정합 |
| `1ce23e716987b42236e932ccc665dc77fb8d80c7` | 2026-07-16T09:45:57+09:00 | fix(treat): serialize collection against auth expiry |
| `267bf61f3e3316811fdccb52d2f8846e055caf89` | 2026-07-20T16:24:09+09:00 | docs(db): describe automobile canary receipt fields |
| `299d60bc18455ffcca09b79608801b295f0ef277` | 2026-07-31T11:39:43+09:00 | feat(analyze): 기업/조직관리자 자동차분석 열람 허용 (기획 요청) |
| `2b594c467b2732ad22de4eda809074ba0eb780df` | 2026-07-22T15:55:27+09:00 | fix(analyze): show new car results to FCs |
| `2bbb103741dd96c67204ab9f8d050349a8417291` | 2026-07-15T11:31:11+09:00 | feat(analysis): 30일 투약 상세에 진단정보 추가 |
| `31552bb911f2941f1a1be350d23d6738d6fc5e9e` | 2026-07-23T15:27:01+09:00 | feat(settlement): 구매내역서 목업 레이아웃 반영·구독내역 소속조직 추가 |
| `3198262e999d874ee764c00bd46057c2df80846c` | 2026-07-22T10:54:17+09:00 | fix(fc): make subscription uploads bounded and awaited |
| `346af660ce3b4c6532e61783f932ed293d57f2a3` | 2026-07-27T09:56:31+09:00 | test(fc): settleInBatches 스펙을 순차(BATCH_SIZE=1)에 맞춤 — maxActive 5→1 |
| `36ce134e65a2b4f22c350817934a54eed7a9631f` | 2026-07-23T14:27:10+09:00 | perf(treat-monitor): 진료집계 쿼리 최적화 — 상관 서브쿼리를 실패 주문에만 |
| `3ca52d7b075a2d46f9827e830a432ec3cdfd6eb9` | 2026-08-04T17:21:05+09:00 | feat(nts): add staged medical relay |
| `3f1b5bd07f8bb02092af740e85a826d90bd3d6cd` | 2026-07-31T16:53:42+09:00 | feat(corp): 주문·정산 상세 엑셀을 기업관리자 화면 컬럼과 일치 (기획 요청) |
| `452285b4651252d37a8f78380d8e60ccff8abe4c` | 2026-07-13T13:32:52+09:00 | feat(treat-monitor): 실패를 유저실패(휴먼)/시스템실패로 3분류 통일 + 소요/타임아웃 제거 |
| `461857e2ca5df5f62094bb5e2f76c6f070b45565` | 2026-07-22T14:51:36+09:00 | fix(client): hide car results before public cutoff |
| `47d90c30a0c6f4bf698c678dd004491808cbad2f` | 2026-07-28T19:09:55+09:00 | fix(security): 분석·청구서 조회에 소유자 검증 추가 — 비인증/타계정 열람 차단 |
| `482f60df0235ff4314816e66024106222e79af80` | 2026-07-31T13:30:51+09:00 | fix(security): 관리자 열람 통과를 admin-view 단명 토큰으로도 인가 |
| `4b90672174ac52f41eec0ad0680bca87a6d0b605` | 2026-07-27T10:33:53+09:00 | test(subscribe): 구독실패 재구독 순차화 유닛테스트 추가 |
| `4d798f55f021d93c889725e50f18cbce20272fd1` | 2026-08-05T09:27:43+09:00 | feat(loss): add analysis workflow |
| `544730122273b764d294ecae8fadee3c694662ea` | 2026-07-24T09:47:18+09:00 | feat(agency): 기업별 분석관리 화면 노출여부(agc_analysis_view) 컬럼·게이팅 추가 |
| `5b00db6db064b450f014c8405d53a4e07c6fae6a` | 2026-07-30T10:18:22+09:00 | feat(fc): add account update spreadsheet |
| `5e18eb66fd1632f44b912b23fe74d5f85bf81e1e` | 2026-07-21T14:05:52+09:00 | feat(treat-monitor): 일별 집계 grain에 vendor 추가 — 벤더별 시도+코호트 분해 |
| `611a2c3438a6aace52380a083e30d4af5b80eb04` | 2026-07-21T13:53:15+09:00 | feat(treat-monitor): 일별 집계에 grain(일/월) 추가 — 월 단위도 시도+코호트 동일 집계 |
| `6276347ac1d4984c008d4f2b1011bfd1ac39dba2` | 2026-07-31T10:28:19+09:00 | feat(auth): 조직관리자 로그인 기업 식별을 agcLoginId → agcCorporateCode로 변경 |
| `6733fa99c997f2fcb5d8e4cf1627786f942933a1` | 2026-07-23T17:40:46+09:00 | feat(report): stage Samsung S2 delivery |
| `6d86ab4ed0d480025f17b47fffb4e9e854ae8e1f` | 2026-07-31T15:30:03+09:00 | fix(corp): 조직관리자 노출여부 변경 허용 — CorpReadonlyGuard 예외 + 부분트리 스코프 검증 |
| `6f226e33f194f7e68a3ebfab214fac91fced39c1` | 2026-07-13T14:43:53+09:00 | feat(treat-monitor): 월 집계를 벤더사별로 분해 |
| `743e010aa627ec60b567eb7d89cd45b8da7d131a` | 2026-07-28T19:41:25+09:00 | fix(security): 투약·검사 추천 조회에 소유자 검증 추가 |
| `7514332de8d9743b0953ab90a6bd874c35e53892` | 2026-07-23T17:47:31+09:00 | fix(report): isolate Samsung report storage |
| `78c16c3f78bda1319e349778b352a2992dfab73f` | 2026-07-14T19:24:29+09:00 | feat(settlement): 정산 기획 정합 — 편입조건·정산금액 라이브·주문 정산상태·단가 일괄수정 |
| `799cdd7a29b7700a85456c5068146317e7d2af02` | 2026-07-31T11:31:38+09:00 | fix(security): 소유자 검증에 관리자 admin-view 통과 경로 추가 |
| `7c2441c73e0938217353711e4bc76d8543cd120d` | 2026-07-21T15:25:06+09:00 | feat(fc): 이벤트 팝업 [다음에] 96시간 스누즈(계정별, Redis TTL) |
| `7d9295dc10f5a44ef6377297fbc002c1ac752087` | 2026-07-13T10:45:45+09:00 | feat(treat-monitor): 보유 이탈 funnel(주문 단위) 신설 + overview 캐시/single-flight |
| `825ef2ec83c72bf859eeeb741e4d0f22895006de` | 2026-07-22T15:59:49+09:00 | fix(analyze): deny car access without owner |
| `8507677b0764b3018674bbe30eb193affe84eb63` | 2026-07-20T16:21:32+09:00 | feat(car): require one-time consent and strict canary seats |
| `8675a913a58f357067a0e9d6d9c5993d68205fb3` | 2026-07-23T17:45:31+09:00 | Merge remote-tracking branch 'github/stg' into feat/samsung-s2-daily-report |
| `89bc923a108c4b0c81d39ef43e55b6adda4e947e` | 2026-07-16T10:30:07+09:00 | feat(order): 과금방식 스냅샷·기업주문 정산상태 개편·정산확정 취소가드 (기획 회신 반영) |
| `8cc3230c0f7a3c38489630dc7ecf11614aee2786` | 2026-07-20T10:05:36+09:00 | feat(car): gate inhouse canary behind master kill |
| `8d95aa4daa251fea3a902b9e5679b6b7166061e8` | 2026-07-20T18:25:08+09:00 | fix(car): remove one-time receipt gate |
| `8e1d3d0bbad5f680d75d07d769327e3340d75020` | 2026-07-23T15:28:36+09:00 | Merge branch 'stg' of https://github.com/insuniverse-com/insuniverse-server into stg |
| `93245aab2ad5e917e475d244935e96402bf6723a` | 2026-07-31T15:35:46+09:00 | fix(corp): 노출여부 변경 스코프 검증을 목록과 동일한 구독 체인 기준으로 수정 |
| `9d22c5d1fc2086d38d32b8176266de8a3334cbe7` | 2026-07-27T09:53:11+09:00 | fix(subscribe): 구독실패 재구독도 순차화 — 무제한 병렬 → settleInBatches(계약행 데드락 제거) |
| `9d3ccff785dcc4b3b4c04f8c6de70cc957d35a14` | 2026-07-24T10:53:15+09:00 | fix(analyze): hide Samsung patient name in disease PDF |
| `9e4515fac5c40970e348f6cc3e9f28e64618113e` | 2026-07-22T18:56:39+09:00 | fix(fc): preflight batch unsubscribe seat floor |
| `a1d1b1ea78bee29874f9c7ba4d7833ca1ace63c8` | 2026-07-13T14:09:43+09:00 | fix(corp-contract): 회계팀 이메일 필수값 해제 |
| `a3b3694ddba3ee0cb7630a091508f22a246b218e` | 2026-07-31T17:04:55+09:00 | fix(auth): 조직관리자 로그인 - 소속 조직 미배정 사유를 구분해 안내 (E0102) |
| `a71d5f2bcb8ba2f8dfce0b3f17ffc7cf2861edc6` | 2026-07-31T11:31:38+09:00 | feat(order-detail): 기업/조직관리자 분석 목록·엑셀에 고객 인적사항 마스킹 적용 |
| `bbb09d1bfe77eb2cc4db2d54a60a2204aacc875d` | 2026-07-31T14:02:27+09:00 | feat(corp): 기업조직관리 CRUD 허용 + 마이페이지 API + 정산확정만 노출 (기획 목업) |
| `c563c41207f56aaf57e6b9e7847a755eb291eb39` | 2026-07-14T19:24:29+09:00 | feat(product): 상품 전체조회 응답에 분석건수·판매가 추가 |
| `c577fd29ac47a05c848939e3705519204df51999` | 2026-07-16T10:40:49+09:00 | fix(task-684): 기업별 약관을 기본 약관 타입별로 관리 |
| `c93548bc3ce3e995bea82ed6f361c27f3f8ba54a` | 2026-07-21T11:33:16+09:00 | feat(treat-monitor): 일별 총합계 집계 추가 — 시도기준+고객 코호트 회복, 기업상품 다중필터 |
| `d0df61e53cfe921fd2ebf1e61d1a6b7fc036537e` | 2026-08-03T14:07:12+09:00 | fix(corp): 정산 상세 구독내역 엑셀을 화면 컬럼과 완전 일치 — 소속조직·정산상태도 제외 |
| `de58c755029751abf588e3582ba8cb2d704dd259` | 2026-07-31T15:17:39+09:00 | fix(corp): 분석관리 노출여부 변경 corp 허용 + 고객 인적사항 마스킹 제거 (기획 요청 7/31) |
| `e522e847f57bb7f6f0581bd844c5ddd78b4717df` | 2026-07-21T10:59:12+09:00 | feat(treat): collect car history from coocon and octover |
| `ed93ab75fcf9344794e26aee564e0646450fdeca` | 2026-07-22T15:46:22+09:00 | fix(client): move car visibility cutoff to 16:00 |
| `ef4908eb6f912a6f0453194c70e40f6fed16f4d2` | 2026-07-23T14:40:53+09:00 | feat(treat-monitor): 진료집계 스타일 엑셀 다운로드 엔드포인트 |
| `f0038eb9e4ef1bdb5eeb44e998e863040cf8986b` | 2026-07-20T10:03:42+09:00 | fix(car): gate visibility with signed admin claims |
| `f4c384afe16c6926d98ae7a54c4af49e2ab7157b` | 2026-07-16T15:01:56+09:00 | fix(task-683): 기관 사용중지 시 분석 초대 서버 차단 |
| `f6571e8f04821f56b4ce4a0c61947093c4b94a4e` | 2026-07-16T10:30:42+09:00 | Merge branch 'stg' of https://github.com/insuniverse-com/insuniverse-server into stg |
| `fc4aa47e37ac6f50fd9e5f3ac8d7be8bfbddc283` | 2026-07-13T11:20:52+09:00 | feat(treat-monitor): 이탈 정확분류(진짜이탈 vs 시스템실패) + 업체별·처리추이 반영 |

### insuniverse-site — 33건

| sha | 날짜 | 제목 |
|---|---|---|
| `00f42d0e707c40bd3b3540d445cb0bbc401f19ab` | 2026-07-12T02:04:33+09:00 | Merge staging history for dropout verification |
| `07b2eb125de3fa2eebd56e0376c47adc8df16c01` | 2026-07-12T20:28:35+09:00 | fix(alimtalk): hide form until invite check |
| `0ded155c13b9b9ec2f3e64f3ee9c868b0cd79c81` | 2026-07-07T14:03:55+09:00 | fix(analysis): keep healthy PDF treatment labels user-facing |
| `1789b04235736122507fbc99b9679e92fd4ecc53` | 2026-08-04T15:42:30+09:00 | fix(analysis): preserve current tab during title sync |
| `23b3829842788d4a6c7fc27e6ccbfade0183e6a9` | 2026-07-16T11:19:27+09:00 | fix(task-683): 서비스 사용중지 진입 범위 수정 |
| `26842e0c03a3c1a6ad1ffbfe9bf33c25b43e69eb` | 2026-08-04T13:07:32+09:00 | fix(analysis): select car tab on result entry |
| `29aca4607c90ce202885b53c010fe290fed4155b` | 2026-08-04T17:21:04+09:00 | feat(nts): add staged medical test flow |
| `352c60789f8f7a99ba17a8b67793038317086413` | 2026-07-12T03:19:10+09:00 | fix(alimtalk): recover interrupted authentication |
| `358b48449e14649a257e974aba839fc6412083c5` | 2026-07-07T13:39:33+09:00 | fix(analysis): print treatment tree in healthy PDF |
| `36f31959205dba0596a26fa430393d2cebb067f2` | 2026-07-16T09:50:42+09:00 | fix(task-729): 모바일 푸터 드롭다운 명칭 변경 |
| `3d57bc3377736cec50b27f3f81d3f82e89ed4032` | 2026-07-12T22:23:29+09:00 | test(alimtalk): 뒤로가기 차단 훅 회귀 테스트 + history.state 보존 |
| `4183078276325ba0ed8b34ccff9d0d5da4a68c1c` | 2026-07-07T13:48:37+09:00 | Merge branch 'stg' of https://github.com/rstful/insuniverse-site into stg |
| `47b47b3fea7d28ad950900ed580a9379ca919b93` | 2026-08-04T11:18:42+09:00 | fix(analysis): default result tab to car injury |
| `4c83641851b1c7f21779d0daca075b6005e8edbd` | 2026-07-15T11:31:11+09:00 | feat(analysis): 30일 투약 상세에 진단정보 추가 |
| `4ce1e5efa20e18711dddd0735ea2126f5ac47a76` | 2026-07-27T13:17:34+09:00 | fix(alimtalk): clarify authentication wait time |
| `5216586173de7159a5149dd8f31851305125b35f` | 2026-07-16T10:40:49+09:00 | fix(task-684): 기업별 약관을 기본 약관 타입별로 관리 |
| `53b37a49c7f214fd894bf8a8d0f578c386eb5bd4` | 2026-07-21T15:01:04+09:00 | fix(push-consent): 이벤트 알림 팝업 [다음에] 96시간 쿨타임 |
| `58ed02bd3a198be1b4cb7be4625eb1ca6a77117c` | 2026-07-12T21:54:28+09:00 | fix(alimtalk): certify 제출 이후 화면 뒤로가기 차단 (재전송·세션만료 방지) |
| `5e02efb99b06450cc5472adfc6427aa6ddb58527` | 2026-07-16T16:39:02+09:00 | fix(task-683): 일시중지 팝업 문구와 닫기 위치 수정 |
| `5f1a8845bdbf2f5335e732f9a278522861a7ff24` | 2026-07-12T17:56:14+09:00 | fix(alimtalk): reject expired certify resumes |
| `63cb62f4b0aac4ce38f16d125bb054f50a393c08` | 2026-07-06T16:44:29+09:00 | fix(payment): handle subscription payment failures |
| `69d4dbc4a8b70da94e7d68a23603dd201fe9cdba` | 2026-07-07T13:36:17+09:00 | feat(analysis): 건강체 목록 건수/총투약일수 표기 보강 |
| `72b20f23cec878737bf35d532de5dd04e120b128` | 2026-07-16T15:01:56+09:00 | fix(task-683): 사용중지 모달 우회 초대 차단 |
| `767d1e441637b5cba759acbe1f928a47f17397eb` | 2026-08-05T09:27:43+09:00 | feat(loss): add user analysis flow |
| `83568062dbfb2c1288775a36b3dbd493ab4bcb29` | 2026-07-31T13:31:01+09:00 | fix(admin-view): 질병예측·투약/검사 기준 조회에도 admin-view 토큰 헤더 전달 |
| `856ecd6b0066911938576cf5de10a1c79428e70a` | 2026-08-04T13:42:40+09:00 | fix(analysis): reset B2C entry to car tab |
| `85823b783336b62cbdd5da532562442994918d02` | 2026-07-23T16:52:46+09:00 | fix: 프로필 카드 반응형 배치 개선(모바일 2줄, PC 긴 이름 2줄 전환) |
| `926eb4d8392f862b959cda63f7ebb33ceeb454ce` | 2026-07-21T15:25:47+09:00 | fix(push-consent): [다음에] 96h를 서버 스누즈로 전환(계정별·웹/앱 공유) |
| `c16367fad30ea1476ca6a643c7bcf63f0281eedd` | 2026-07-12T21:47:21+09:00 | fix(analyze): prevent duplicate invite submits |
| `cf381689d20918d65affcbfb36c2382667929ec0` | 2026-08-04T13:35:11+09:00 | fix(analysis): reset result entry to car tab |
| `d0006a5f205981082de6aa5c4ce9d2de8d476c3c` | 2026-07-12T16:45:53+09:00 | fix(alimtalk): follow certify session expiry |
| `de1d0ad995d22a44d1a5574d6a6c8ab433f88dd1` | 2026-07-24T10:53:15+09:00 | fix(analysis): omit masked patient name from disease PDF |
| `eb1bed93a3f392f63aa65ff00fff5a87f37f3eb2` | 2026-07-07T13:53:10+09:00 | Revert "fix(analysis): print treatment tree in healthy PDF" |

### insuniverse-admin — 53건

| sha | 날짜 | 제목 |
|---|---|---|
| `00032339ebd01b4b0edd6eb18e2ddf4085b9f563` | 2026-07-31T16:53:51+09:00 | feat(corp): 기업회원관리 버튼 통합·글자색 적용 + 정산상세 컬럼 정리 (기획 요청) |
| `0d9576f332a1c1c9bccb5e6cc1c4e029ab566e53` | 2026-07-30T10:18:27+09:00 | feat(fc): add account update upload UI |
| `11ecdf89948b674c0725c3be9661b0b151eab575` | 2026-07-14T17:24:02+09:00 | fix(treat-monitor): show rates for every outcome |
| `1a268eb1e3a44fa1154067214d23063d2515771d` | 2026-07-21T13:54:16+09:00 | feat(treat-monitor): 월/일 탭 통일 — 둘 다 시도+코호트 표, 헤더 재배치·상품 조회옆 |
| `1bd1f5d3d0aff5661eebe064354b357fe40d911c` | 2026-07-16T11:04:06+09:00 | fix(admin): 공통 2값 여부 글자색 보완 + 정산확정 취소차단 안내 메시지 |
| `1d5f21028dc201a3698900e1a6c43f333d13ca2a` | 2026-07-14T19:25:15+09:00 | feat(settlement): 주문 정산상태 컬럼·단가 일괄수정·표시건수 500 |
| `1f15e2afc967b805f28408622857700c074eb734` | 2026-07-21T17:37:43+09:00 | style(treat-monitor): 진료집계 표 최대높이+스크롤, 헤더·일자열·합계행 고정 |
| `2c48a7e565009fb14a361617cbf5659d32ec713e` | 2026-07-31T11:31:57+09:00 | feat(corp): 분석관리·기업주문 상세를 기획 목업(company-mockup) 스펙에 정합화 |
| `31a5825c68ccf766e8b7cb8d8bd03f9b0f337a48` | 2026-07-13T13:51:40+09:00 | fix(treat-monitor): 업체별 테이블 단가 컬럼 제거 (미사용) |
| `345df7c5e4842170d33241eaeba8f24f42bcd041` | 2026-07-14T19:26:30+09:00 | Merge branch 'stg' of https://github.com/rstful/insuniverse-admin into stg |
| `391629fe51320a92d552591a6ef4ded3db9dc151` | 2026-07-13T10:51:18+09:00 | feat(treat-monitor): 보유 이탈 funnel(주문 단위) 표시 + 폴링 안정화 |
| `3f0b9f52b729b62f3d86681a273751b0ad83fcdb` | 2026-07-13T11:21:10+09:00 | feat(treat-monitor): 이탈 정확분류 표시 — 진짜이탈 vs 시스템실패 + 업체별·처리추이 |
| `40ef4a840d68eeacaf94fc05b805e590639ecc06` | 2026-07-14T19:24:48+09:00 | feat(corp): 목록 보강 — 기업코드 컬럼·계약 과금방식/계정수·상품 옵션 금액 병기 |
| `4595e2eecf28279e905e78aebb4d20f598ef7358` | 2026-07-13T15:35:07+09:00 | fix(corp-product): 기업구독상품 판매가격 0원 입력 허용 |
| `47456e6a04cbe66f229b995939d5013c6bb3e070` | 2026-08-03T14:20:51+09:00 | feat(corp): 기업회원 상세 조직·관리자 권한 탭 저장 버튼 통합 (기획 피드백) |
| `47e5e91b10a33a3573e66d4263237f65149cc76d` | 2026-07-13T14:10:42+09:00 | fix(corp-contract): 회계팀 이메일 필수값 해제 |
| `48e52b5df74d78aaca092e826adb8db6727832dd` | 2026-07-30T17:50:27+09:00 | feat(login): 로그인 path 분리 — /login 기업·조직 전용, /manage/login 통합·채널 전용 |
| `5102ff5e2bb7a1da02c7de635c07aeae43f41364` | 2026-07-21T16:26:31+09:00 | style(treat-monitor): 진료집계 표 톤 정리 — 의미색·0행 dim·그룹밴드·정렬·합계강조 |
| `51872df712e13be7320defccf5a399a4181d476d` | 2026-07-21T13:37:03+09:00 | feat(treat-monitor): 월/일 집계를 탭으로 통합 (일 단위=시도기준+고객 코호트) |
| `5fa4d8e93867c25c7f3a568c22a8516b741ae8dc` | 2026-07-16T11:19:27+09:00 | fix(task-683): 이미지 팝업 권장 크기 안내 |
| `62eafd3dc5e0e2b861afbaade77a31806e35f482` | 2026-07-13T12:02:40+09:00 | fix(treat-monitor): 월 선택 UI를 화살표 네비로 교체 |
| `64b5811b0e02eefe05b117f5080120cea39a88d9` | 2026-07-23T15:45:20+09:00 | feat: 일반고객관리 회원타입·기업머니관리 계약종료여부 글자색 적용 |
| `663469e64cc43d3defc21b5498e35d8a8e431ff6` | 2026-07-23T15:29:00+09:00 | Merge branch 'stg' of https://github.com/rstful/insuniverse-admin into stg |
| `6815f30fc1ba9f485492ebcd1b88551b4d3ff56c` | 2026-07-31T10:28:03+09:00 | feat(login): 조직관리자 로그인 기업 식별을 기업 아이디 → 기업코드로 변경 |
| `743aeb72558ddc4685a3d575a61d10a490c3d4e0` | 2026-07-13T14:44:01+09:00 | feat(treat-monitor): 월 집계 표를 벤더사별 행으로 분해 |
| `7d78433cc5d7ec3733d0a0391dbb351b8ae5a904` | 2026-07-16T10:40:49+09:00 | fix(task-684): 기업별 약관을 기본 약관 타입별로 관리 |
| `87e0d550b1a3b48398e1164ffb8aaa933bceb398` | 2026-07-31T17:05:01+09:00 | fix(login): 조직관리자 로그인 실패 시 서버 사유 메시지 표기 (소속 조직 미배정 등) |
| `87f20b6c21468df4077b7e5f4ce28ac03d82e0ad` | 2026-07-13T12:54:53+09:00 | fix(treat-monitor): 업체별 실패=총실패−이탈(분리) + 처리추이 이탈 스택막대 |
| `9051ecf85dcdc59ba6192617e738879efb95d57f` | 2026-07-13T13:32:55+09:00 | feat(treat-monitor): 실패 3분류(이탈/유저실패/시스템실패) 전 영역 통일 + 소요/타임아웃 컬럼 제거 |
| `97202a0ce55a0875c724ca27d7a6451712ebd09b` | 2026-07-13T17:07:47+09:00 | fix(corp): 기업관리자 메뉴 회원관리>기업회원관리만 노출 |
| `99c530715b5d8db299e2c833e253ba68cdfca5ed` | 2026-07-21T14:06:40+09:00 | feat(treat-monitor): 벤더별 탭 추가 + 상품 선택 react-select 멀티로 교체 |
| `9cc80018d7f55671260a445628aa335557abd3d2` | 2026-07-21T13:23:07+09:00 | feat(treat-monitor): 진료모니터링에 일별 총합계 화면 추가 |
| `9d705e07807708933568bd28b8cba9c62d3a0cda` | 2026-07-21T14:45:26+09:00 | fix(treat-monitor): 진료집계 컨트롤 우측 정렬 + 프리셋/캘린더는 조회 버튼으로만 조회 |
| `a073a0dfa22998d8a3fcc7c5d68ee4c943f096d0` | 2026-07-21T14:51:26+09:00 | fix(treat-monitor): 업체별·처리추이 '이탈' 라벨을 '진짜이탈'로 통일 |
| `a88fdd8bd6d6c027083175da8575ba3b1e7c0485` | 2026-07-16T10:31:52+09:00 | feat(admin): 기업주문 과금방식·정산상태 개편 + 목록 상태 글자색 공통 적용 (기획 회신 반영) |
| `b753586bfa0212ca71c3fe2fd9e49e4ae2e29907` | 2026-07-31T14:02:51+09:00 | feat(corp): 기업조직관리 화면·마이페이지 신설 + 주문/정산 목록 목업 정합화 |
| `beff725f2ebef2219cf5c667b64ae30f30b24b86` | 2026-07-13T16:56:02+09:00 | fix(corp): 기업회원 신규등록 소속조직 필수 해제 |
| `c4f96eeaa65ae2ffc14dbefce2eb025b922c87c1` | 2026-07-24T09:47:40+09:00 | feat(corp): 기업별 분석관리 화면 노출여부(agcAnalysisView) 설정·노출 게이팅 추가 |
| `c7d8ebcb3c8050e74dc24360841a5760e1e51bb7` | 2026-07-13T11:49:00+09:00 | feat(treat-monitor): 월 단위 집계 UI + 업체별 컬럼 재정렬 |
| `d05f5d91974e89ddb3f7ce0573f3f2db8e5fae74` | 2026-07-31T15:30:27+09:00 | feat(login): 로그아웃 시 본인 포털 로그인 화면 복귀 + 마지막 시도 탭 active 복원 |
| `d6f73ffc2858d4c4bb77386dbb6ec3c878df59dc` | 2026-07-21T14:17:01+09:00 | feat(treat-monitor): 진료집계 기간 UX 개선 — 프리셋 버튼 + 헤더 정리 |
| `daa7bef6fa0e3067e58f87cb9ccbb5b7bf182cc1` | 2026-07-31T10:21:36+09:00 | feat(corp): 기업관리자 메뉴에 기업주문·기업정산 재노출 (기획 요청) |
| `dd1888a3c029b441622bf306e5697366954a63ed` | 2026-07-23T15:26:07+09:00 | feat: 관리자 목록 상태값 글자색 일괄 적용 (2026-07 기획) |
| `e47c3159071808ce28e66ebb6a0bf7512743753c` | 2026-07-23T15:26:46+09:00 | feat(settlement): 후불정산 메일 문안 개편·구매내역서 미리보기·주문내역 소속조직 추가 |
| `e51690310ae6ce4269a68dcea8db51be43d00664` | 2026-07-23T14:47:41+09:00 | feat(treat-monitor): 진료집계 엑셀 내보내기를 서버 스타일 xlsx 다운로드로 |
| `e573bdaf28bcae5bba8eb33669dc0ee6fb79997d` | 2026-07-16T14:47:57+09:00 | fix(corp-order): 정산확정 주문취소 버튼 차단 + 과금방식 글자색 (기획 피드백) |
| `e7af130d2ecc4e88f978fefe51cec860a7f253a1` | 2026-07-23T15:37:07+09:00 | fix(settlement): 구매내역서 미리보기 중복 닫기 버튼 제거 (모달 헤더 X와 중복) |
| `f089625003696dd68488d0e417d94fc5f758d8bd` | 2026-07-21T14:27:33+09:00 | feat(treat-monitor): 기간 선택을 프리셋+2개월 캘린더 팝오버로 (daterangepicker 스타일) |
| `f1458df283c0979c35ceff776630cc28d6da2b7d` | 2026-07-16T15:01:56+09:00 | fix(task-684): 약관 편집기 표시 개선 |
| `fa9618e055c940f82962fe5aab8f73e5da2c7b56` | 2026-07-31T14:07:37+09:00 | fix(corp): 마이페이지 헤더 중복 표기 수정 — 목업 crumb(마이페이지/기업정보·내 정보) 반영 |
| `fb001e1d26d342130cf9a8dc8fe5e8a64e1da9c8` | 2026-08-05T09:27:43+09:00 | feat(loss): add admin analysis views |
| `fc92163fe32f3dd434f4250a5f5c709d6c05c7e8` | 2026-08-03T14:30:31+09:00 | feat(corp): 기업회원관리 버튼 순서·모달을 목업과 일치 + 조직관리자 기능제외(org-excl) |
| `feeed12aeb339eaca3670576e366ef6af9a0ec03` | 2026-07-22T18:45:45+09:00 | fix(corp-fc): refresh list after account upload |

---

## 인덱스에 없는 stg-only 5건

**이 절은 sha 와 `reason` 2열뿐이다. 제목도 날짜도 싣지 않는다.**
5건 중 4건이 `planning-only` 이고 `planning/` 은 등급 L 이라 값을 인용하지 않는다.
추출기가 `{sha, reason}` 만 기록한 것도 같은 이유이며 이 문서는 그 형태를 그대로 따른다 —
나머지 1건(`empty`)도 같은 표에 두어 열 모양을 가르지 않는다.

| sha | reason |
|---|---|
| `1dea31623a6cff40155e64cb5d23bfbb657cbfd4` | `empty` |
| `8da4116a3ae153aa49ae1ef354086c842a89f92e` | `planning-only` |
| `55b6277363bf3c8ed56ed96250985c057c28f053` | `planning-only` |
| `9f3d1812299ceb22abc09671c17a40d545223746` | `planning-only` |
| `f43e13f59d520e0bf62fe1aeda34e70bdeb49938` | `planning-only` |

---

## 이 문서가 하지 못하는 판정

### 배포 승격

**저장소 안에 릴리스를 확증할 독립 증거가 없다.** 3저장소 전부 태그 0개이고
`refs/replace/*` 도 비어 있다.

| 저장소 | 태그 | `refs/replace/*` |
|---|---|---|
| `insuniverse-server` | 0 | 0 |
| `insuniverse-site` | 0 | 0 |
| `insuniverse-admin` | 0 | 0 |

`releases.yaml` 의 `prod_merge` 버킷은 **제목 일치와 부모 토폴로지의 기록이지 배포 승격 판정이
아니다.** CI·PR 메타데이터는 이 저장소의 범위 밖이다. **배포 승격 판정의 주체는 `00-protocol`
소관이다** — 이 문서는 그 판정을 내리지 않고 판정 주체의 이름만 남긴다.

그래서 이 문서의 발산 항목에 대해 **"실제로 배포됐는가" 는 `unknown` 이다.** prod 도달은
배포됨이 아니다.

### 참조 카운트

PRD §Risks 의 *prod 발산 항목이 실제로는 미배포 코드* 행은 완화책으로 **참조 카운트 병행 확인**을
건다. **그 완화책은 이 창에서 작동하지 않는다.** 발산 축의 참조 카운트가 구조적으로 비어 있고,
그 사실을 숨기지 않는 것이 이 문서 산출의 일부다.

**"교집합 0" 과 "축이 없다" 를 한 칸에 적지 않는다.** 앞은 재봤는데 안 맞은 것이고 뒤는 잴
필드가 없는 것이다. 축마다 앵커 보유 행수와 교집합을 **둘 다** 적는다 — 앵커 총수가 0인 축을
교집합 0 으로 접으면 파서 파손이 관측으로 위장한다.

| 축 | 소스 | 총 행수 | 커밋 앵커 보유 | prod-only 교집합 | 분류 |
|---|---|---|---|---|---|
| 커밋 앵커 후보 | `policy-candidates.git.jsonl` | 2870 | 2870 | 102 | 자기 참조 |
| 커밋 인덱스 | `commits.<repo>.jsonl` | 6190 | 6190 | 0 | 교집합 0 |
| 코멘트 (server) | `comments.server.jsonl` | 4413 | 0 | — | 축 부재 |
| 코멘트 (site) | `comments.site.jsonl` | 3514 | 0 | — | 축 부재 |
| 코멘트 (admin) | `comments.admin.jsonl` | 4761 | 0 | — | 축 부재 |
| 코드 후보 | `policy-candidates.code.jsonl` | 1994 | 0 | — | 축 부재 |
| 런타임 후보 | `policy-candidates.runtime.jsonl` | 50 | 0 | — | 축 부재 |

- **커밋 앵커 후보** — `policy-candidates.git.jsonl` 2870행 전건이 `anchor_commit.sha` 를 갖는다.
  prod-only 적중은 102건이고 그 102건 전부가 `source: prod_only` 인 **자기 행**이다 —
  발산 버킷을 발산 버킷으로 센 것이라 외부 참조는 0이다.
- **커밋 인덱스** — `commits.<repo>.jsonl` 6190행과 prod-only 102건의 교집합이 **0** 이다.
  모든 하류 인덱스가 동결 stg HEAD 를 기준선으로 잡는데 prod-only 는 정의상 `--not <frozen head>`
  이므로 이 교집합은 구조적으로 비어 있다.
- **코멘트 축** — `comments.*.jsonl` 에는 커밋 sha 필드 자체가 없다. 앵커가 `file`·`line_start`·
  `line_end` 라서 커밋 단위로 셀 수 있는 축이 아니다.
- **코드·런타임 축** — `policy-candidates.code.jsonl`·`.runtime.jsonl` 에도 커밋 앵커 필드가 없다.

측정 시점 판정이 미결이므로(`id=60m2b-refcount-measurement-point`) 참조 카운트 축을 새로 유도하지
않는다 — 그 판정 없이 만든 값은 추론을 사실로 쓰는 것이다.

**결론**: 발산 판정에 참조 카운트를 병행 확인하려면 둘이 어긋날 때 `unknown` 이어야 하는데,
여기서는 **잴 수 없다.** 잴 수 없는 것도 어긋남으로 처리해 이 문서의 배포 여부 판정은 `unknown` 이다.

