# 01 · prod 릴리스 연대기

이 문서는 **prod 릴리스 노트 커밋의 정본**이다. `releases.yaml` 이 `prod_merge` 로 분류한 45건과
그것을 닮았으나 아닌 5건(`release_like_unmatched`)을 전건 싣고, 그 위에 **이 문서가 내리지
못하는 판정 두 개**를 이름으로 남긴다.

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

> **이 연대기는 이력 전체를 덮지 않는다.** 릴리스 노트 커밋은 8일에만 있고 인덱스 6,190행 중
> 그 창 안은 264행이다. 나머지 5,926행에 대해 이 문서는 어떤 주장도 하지 않는다. 사정거리는
> §이 연대기가 덮지 못하는 구간에 계수로 적었다.

> **발산 두 버킷은 이 문서 소관이 아니다.** prod-only 102건과 stg-only 155건의 정본은
> [03-divergence.md](03-divergence.md) 이고, `prod_merge` 45건은 그 두 버킷과 sha 교집합이 0 인
> 다른 버킷이다. 같은 커밋을 두 문서가 나눠 싣는 자리가 없다.

---

## 기준점

`measured_at` 은 prod 팁 3개의 author date 중 최댓값이고 실행 시각이 아니다. prod 쪽 기준은
`releases.yaml` 이 잠근 SHA 다. 재유도는 **locked SHA 로만 재현된다** — 로컬 `refs/heads/prod` 는
실측상 이미 이동했으므로 기준이 아니며, 그 관측의 정본은 [03-divergence.md](03-divergence.md) 다.

| 항목 | 값 |
|---|---|
| `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` |

### 두 정규식과 그 출처

버킷을 가르는 것은 제목에 거는 정규식 둘이다. **두 정규식의 출처가 다르다.**

| 이름 | 원문 | 출처 |
|---|---|---|
| `release_note_pattern` | `^merge(\(stg\))?: *stg *(→\|->\|to) *prod` | manifest `release_rules` 원문 |
| `release_like_pattern` | `^merge\(stg\)` | **manifest 에 없다 — 추출기 국소 상수** |

`release_like_pattern` 은 `extraction-manifest.yaml` 에 없고 `extract-releases.mjs` 가 자기 안에
든 상수다. 그래서 §릴리스 노트를 닮았으나 아닌 5건의 **분류 근거는 인덱스 계약 밖**이다. 이
사실을 적지 않으면 그 5건이 계약값처럼 읽힌다. 관측을 그대로 적는다.

### 사정거리

| 버킷 | server | site | admin | 합 |
|---|---|---|---|---|
| `prod_merge` | 24 | 7 | 14 | 45 |
| `release_like_unmatched` | 2 | 1 | 2 | 5 |

### 두 버킷의 era

두 버킷은 **전건 Era B** 다. Era A 추출 축은 파일경로 기반이고 Era B 추출 축은 제목 기반인데,
이 문서의 50건은 전부 후자에 해당한다 — 그래서 **Era A 추출 축은 이 문서에 적용되지 않는다.**
era 값은 리터럴이 아니라 `commits.<repo>.jsonl` 의 `era` 열에서 유도한다.

| 버킷 | Era A | Era B |
|---|---|---|
| `prod_merge` | 0 | 45 |
| `release_like_unmatched` | 0 | 5 |

---

## 릴리스 일자

릴리스 노트 커밋이 찍힌 날은 **8일**이고, 그 8일 전건이 **2저장소 이상**에 걸린다.

> **이것은 배포 동시성의 증거가 아니다.** 같은 날 릴리스 노트가 여러 저장소에 찍혔다는
> 관측일 뿐이고, 그 커밋들이 실제로 함께 배포됐는지는 이 문서가 판정하지 못한다
> (§이 문서가 하지 못하는 판정 · 배포 승격).

| 일자 | `insuniverse-server` | `insuniverse-site` | `insuniverse-admin` | 합 |
|---|---|---|---|---|
| 2026-06-06 | 4 | 0 | 2 | 6 |
| 2026-06-07 | 2 | 1 | 2 | 5 |
| 2026-06-08 | 3 | 0 | 2 | 5 |
| 2026-06-09 | 4 | 0 | 1 | 5 |
| 2026-06-10 | 7 | 1 | 5 | 13 |
| 2026-06-11 | 2 | 1 | 0 | 3 |
| 2026-06-18 | 1 | 3 | 1 | 5 |
| 2026-06-19 | 1 | 1 | 1 | 3 |
| 합계 | 24 | 7 | 14 | 45 |

---

## 릴리스 노트 커밋 45건

`prod_merge` 버킷 전건이다. **이 45건은 발산 두 버킷과 sha 교집합이 0 이다** —
`prod_only` 와의 교집합 0, `stg_only` 와의 교집합 0 이 3저장소 전건에서 성립한다. 그래서 이
문서는 [03-divergence.md](03-divergence.md) 의 산출물을 다시 싣지 않는다.

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

토폴로지 두 열(`on_prod_first_parent` · `parents_on_prod_first_parent`)을 표에 둔다. **그 두
값이 §이 문서가 하지 못하는 판정의 입력**이고, 본문 산문으로만 적으면 행마다 다른 값을 독자가
대조할 수 없다. 어휘: `on_prod_first_parent` = 병합 커밋 자신이 prod 팁의 1차 부모 사슬 위에
있다 · `parents_on_prod_first_parent` = 그 사슬 위에 있는 부모의 1-기반 위치 목록.

### insuniverse-server — 24건

| sha | 날짜 | 제목 | `on_prod_first_parent` | `parents_on_prod_first_parent` |
|---|---|---|---|---|
| `686b9020da71ec7fd9561572c008ef6011f3df30` | 2026-06-19T17:10:49+09:00 | merge: stg → prod (재분석 가드+가짜완료 차단 / 자료수집실패 상태 / 관리자 재분석 사전가드) | `true` | `[1]` |
| `8f2b6d4d0ec236e4e9b0deb9646fec3998b11144` | 2026-06-18T18:01:22+09:00 | merge: stg → prod (2차 인증/수집 실패 단계별 분기 + 병원코드 NULL 정규화 + inhouse 어댑터(휴면) + 처리량 그래프 처리시점 집계 + 기업정산 엑셀) | `true` | `[1]` |
| `ae8f41bbc72725d4f1f237286281ff6570c9be70` | 2026-06-11T16:58:39+09:00 | merge: stg → prod (진료 자료없음 빈 분석 성공 처리 + 벤더 에러카탈로그 + 푸시 발송내역 조회 API) | `true` | `[1]` |
| `b51bd75b1d6822445a09b199d031f2035e607109` | 2026-06-11T09:48:50+09:00 | merge: stg → prod (수집 타임아웃 건 목록 건강이음 안내 + 재시도 숨김) | `true` | `[1]` |
| `cd126112c69b4ed8854f56b4b102af9cc79d4962` | 2026-06-10T17:17:42+09:00 | merge: stg → prod (수집 타임아웃 시 건강이음 안내 알림톡) | `true` | `[1]` |
| `3c4173cb34ae1ff52dc2d87e42733c7d94d5664a` | 2026-06-10T16:32:59+09:00 | merge: stg → prod (쿠콘 axios timeout 330초 — 미완료 과금 회피) | `true` | `[1]` |
| `942568dc5bc6d70250ce366e37400f44bd3acc16` | 2026-06-10T16:11:31+09:00 | merge: stg → prod (분석로그 타임아웃 필터 E0003 수정) | `true` | `[1]` |
| `98803b16e516bb2d15e94836d9fb99b38f4606bf` | 2026-06-10T15:13:49+09:00 | merge: stg → prod (수집 구간별 소요 노출 + 진료모니터 최대소요 + 분석로그 타임아웃 필터) | `true` | `[1]` |
| `2f7865554a035d292e4404ab026cc7da2e6dc99d` | 2026-06-10T13:54:10+09:00 | merge: stg → prod (진료 수집 소요시간·타임아웃 기록 + 모니터링/분석로그 지표 표시) | `true` | `[1]` |
| `95cadfcc8270cdc28942c54975540c5ff501b641` | 2026-06-10T13:29:32+09:00 | merge: stg → prod (coocon 수집 조회기간 고정 분할 — 기본 OFF, split=1) | `true` | `[1]` |
| `6d8b28fddcc906bdf8e0ebefe262527feabc231a` | 2026-06-10T11:20:18+09:00 | merge: stg → prod (회원머니 기업코드·미리보기·영업대리점·DTO + 진료모니터 + coocon실증 원복) | `true` | `[1]` |
| `d772d0ad5cd927170a03b91b387c30fc75b64df3` | 2026-06-09T15:36:08+09:00 | merge: stg → prod (엑셀 다운로드 실패사유 배치 IN쿼리 최적화 + requestTimeout 30분) | `true` | `[1]` |
| `4d65dc450ba5396a3a87eb44d01424549260235f` | 2026-06-09T14:36:10+09:00 | merge: stg → prod (엑셀 처리업체·실패사유 컬럼 + 다운로드 계측 로깅) | `true` | `[1]` |
| `d9a083afdb6fd9f4cacda693708e0a61636b86a0` | 2026-06-09T14:02:14+09:00 | merge: stg → prod (분석관리·분석로그관리 엑셀 전체다운로드 배치 스트리밍) | `true` | `[1]` |
| `6ceeeaad7250cdfac74553df9159683cbd5d2428` | 2026-06-09T11:22:54+09:00 | merge: stg → prod (벤더 거래번호 reqCd/trSeq 저장 + 하이픈 실제코드 노출) | `true` | `[1]` |
| `c1bc56c3900bb95f5ba00d5e3ec9b5ed9f0ba5ef` | 2026-06-08T05:14:46+09:00 | merge: stg → prod (분석로그관리 카운트 최적화·중복조인 수정 + 분석관리 처리업체 검색) | `true` | `[1]` |
| `b22c3c4e862f26385a6af0a023c699cb93dae013` | 2026-06-08T04:44:13+09:00 | merge: stg → prod (실패사유 자동차 미수집·대기열 제외 수정) | `true` | `[1]` |
| `4a20d8643af354c3c3518b2f0d9d239dd3487f2c` | 2026-06-08T04:15:16+09:00 | merge: stg → prod (분석관리·로그관리 실패사유·처리업체 필터·실패메시지 + 조회 인덱스 + rate-limit 모니터·에러라벨) | `true` | `[1]` |
| `411ba998cbfa2c5bc758acc1773487bf00985dcf` | 2026-06-07T16:23:23+09:00 | merge: stg → prod (인증 입력 사전검증) | `true` | `[1]` |
| `1e88d4ed50a3a461e8f70a73d0a62db72c62f7a9` | 2026-06-07T13:14:53+09:00 | merge: stg → prod (rate-limit + 대기열 입장권 게이트 1~3단계) | `true` | `[1]` |
| `d09fa3a02592180dd5962ae651a3bc69ae13e965` | 2026-06-06T21:05:52+09:00 | merge: stg → prod (인증방식 라벨 CCF) | `true` | `[1]` |
| `165076bb1a9c36d9bedfc7af4a5ad1cf33b0d3b7` | 2026-06-06T21:00:28+09:00 | merge: stg → prod (파이프라인 24h 기준 한정) | `true` | `[1]` |
| `bfa5922bd860132bf19250eba8cc369b9fe1e626` | 2026-06-06T20:44:49+09:00 | merge: stg → prod (예약 TTL 10분 복원) | `true` | `[1]` |
| `dcf1e55b99c80f86ab9b28603762cd17e437261d` | 2026-06-06T20:21:38+09:00 | merge: stg → prod (진료 모니터링·공급자 귀속·자동차제외·예약수 reconcile·1차인증 벤더) | `true` | `[1]` |

### insuniverse-site — 7건

| sha | 날짜 | 제목 | `on_prod_first_parent` | `parents_on_prod_first_parent` |
|---|---|---|---|---|
| `0454edd24343661705370c57e9226b87bbb1b846` | 2026-06-19T17:10:50+09:00 | merge: stg → prod (자료수집실패 상태 표시·재분석 버튼 미노출) | `false` | `[2]` |
| `bf6699cab70b1365e6f92b73dac17e7b6466fb0f` | 2026-06-18T18:01:23+09:00 | merge: stg → prod (7일치료 진료내역 표 분류 계층 정렬 일체 + CSS 캐시버전 + 고객초대 문구) | `false` | `[2]` |
| `7da9b77e999bd44cb63255e882230b5b8ecba77a` | 2026-06-18T10:36:30+09:00 | merge: stg → prod (7일치료 분류 트리 진단로그 디자인 + 그룹 진료기간 표기) | `false` | `[2]` |
| `ff640e426418149337f334123ad1bacc3d5664cd` | 2026-06-18T09:48:12+09:00 | merge: stg → prod (진료분석 admin-view 정정·7일치료 5단계 트리·로그인 눈토글·처방 로딩 + 광고 모달 노출 수정) | `false` | `[2]` |
| `f0ae5cc2c5749de45d67766e8234ba56d9b19944` | 2026-06-11T09:49:33+09:00 | merge: stg → prod (분석목록 타임아웃 건 건강이음 안내 + 재시도 숨김) | `false` | `[2]` |
| `7d519b69862f560b473d154fe8f1ee599b8c26f4` | 2026-06-10T11:02:27+09:00 | merge: stg → prod (개인정보 취급위탁 수탁업체 헥토데이터 삭제 + WebOTP SMS 자동입력) | `false` | `[2]` |
| `337b5557553430c5cd9921a073f6d17b2d3d5a47` | 2026-06-07T16:31:52+09:00 | merge: stg → prod (대기열 queueId 클라 + 인증 입력 사전검증) | `false` | `[2]` |

### insuniverse-admin — 14건

| sha | 날짜 | 제목 | `on_prod_first_parent` | `parents_on_prod_first_parent` |
|---|---|---|---|---|
| `8799b43438388a939eb8a0206c32875699b39266` | 2026-06-19T17:10:50+09:00 | merge: stg → prod (분석상태 필터 자료수집실패 추가) | `false` | `[2]` |
| `4b72ca45c84ab70277aa4f6e2e393d5a959d7e50` | 2026-06-18T18:01:22+09:00 | merge: stg → prod (진료 모니터링 벤더 에러표 + 기업정산 상세 엑셀탭 및 버튼표시 수정 + 처리업체 하이픈·자체엔진 라벨) | `false` | `[2]` |
| `23c4038b0a5deacb00895db67ed08359841315bf` | 2026-06-10T16:11:52+09:00 | merge: stg → prod (처리업체 필터 CODEF 제거) | `false` | `[2]` |
| `ed7d5df8ef9f33290d54019a76d452329b0e603e` | 2026-06-10T15:14:14+09:00 | merge: stg → prod (진료모니터 최대소요 컬럼 + 분석로그 타임아웃 필터) | `false` | `[2]` |
| `d03a8bdcc702e67ac3f0052f825f586131040ad3` | 2026-06-10T13:54:37+09:00 | merge: stg → prod (진료모니터링·분석로그 수집 소요/타임아웃 컬럼) | `false` | `[2]` |
| `38d9395d9fc3a6c9372c80924cfe521f69a7a33a` | 2026-06-10T13:23:45+09:00 | merge: stg → prod (수집 분할 설정 UI) | `false` | `[2]` |
| `3e6d5106b3f3fe72f57df02f3bc9f5cd48576016` | 2026-06-10T11:21:08+09:00 | merge: stg → prod (회원머니 기업코드·미리보기 모달·드롭다운 + 푸시 버그픽스 + 진료모니터) | `false` | `[2]` |
| `ee97133fdc16e68641cca7e3e5a57e86eaf42b0c` | 2026-06-09T16:02:32+09:00 | merge: stg → prod (엑셀 네이티브 다운로드 + 실패 안내 alert + 테스터 라우트 운영 숨김) | `false` | `[2]` |
| `e329a05cbf5e63cc80303fcc2ef8c0addc650bc8` | 2026-06-08T05:15:15+09:00 | merge: stg → prod (분석관리 처리업체 검색조건) | `false` | `[]` |
| `08174f2bdd16e1ee389b0d20da0b1a0da1847b5d` | 2026-06-08T04:16:17+09:00 | merge: stg → prod (분석관리·분석로그관리 실패사유·처리업체 필터 + 분당 한도 모니터 컬럼) | `false` | `[]` |
| `91c24e033bdf6db5bbc729cf704fb6a853c7af97` | 2026-06-07T16:25:30+09:00 | merge: stg → prod (rate 토글 UI + 진료 모니터링·오류테스터) | `false` | `[]` |
| `25f13790b6fd70cb1a87788545f795fb565b5a65` | 2026-06-07T15:45:16+09:00 | merge: stg → prod (진료 모니터링·오류테스터·CI/deploy) | `false` | `[]` |
| `ecd2d7b0400c4c585c7ecddadb47f52950bdac41` | 2026-06-06T21:16:56+09:00 | merge: stg → prod (파이프라인 캡션) | `false` | `[2]` |
| `32cbd61d7ea5096380aab2f28a7c8dd3de58e1d9` | 2026-06-06T20:47:37+09:00 | merge: stg → prod (진료 모니터링 대시보드·공급자설정·기업회원푸시 어드민) | `false` | `[2]` |

---

## 릴리스 노트를 닮았으나 아닌 5건

**이 절은 앞 절보다 열이 하나 많다** — 두 정규식의 판정을 각각 싣는다. 5건 전건이
`release_like_pattern` 에 매치하고 `release_note_pattern` 에 매치하지 않는다는 것이 이 절의
내용이고, 판정 열이 없으면 "왜 릴리스가 아닌가" 가 산문에만 남는다.

**제목을 싣는다.** [03-divergence.md](03-divergence.md) 의 미수록 5건이 sha 와 `reason` 2열뿐이었던 것은
그 4건이 `planning-only` 라 `planning/` 등급 L 제약이 걸렸기 때문이고, 여기 5건은 `planning/` 과
무관한 병합 커밋이라 같은 제약이 걸리지 않는다.

| sha | 저장소 | 날짜 | 제목 | `release_like_pattern` | `release_note_pattern` |
|---|---|---|---|---|---|
| `40fb82e552ce9b487f88768c7e158893fee972b3` | `insuniverse-server` | 2026-07-01T15:46:46+09:00 | merge(stg): prod 핫픽스 reconcile — stg↔prod 통일 준비 | 매치 | 불일치 |
| `e69eab1de2678cd6ec45a75e550e20fcec24b14b` | `insuniverse-admin` | 2026-07-01T15:48:09+09:00 | merge(stg): prod 핫픽스 reconcile — stg↔prod 통일 준비 (충돌 0) | 매치 | 불일치 |
| `a7daa60365e9ff12bb35ac71d0e6c404e0ebb6dd` | `insuniverse-site` | 2026-07-01T15:49:22+09:00 | merge(stg): prod 핫픽스 reconcile — stg↔prod 통일 준비 | 매치 | 불일치 |
| `6a187300030288587378ef2663037d61741892ef` | `insuniverse-server` | 2026-07-01T21:53:23+09:00 | merge(stg): 조직트리+조직관리자 권한위임 반영 | 매치 | 불일치 |
| `40186f34bb7e0197a4b40870f25e5c71f5415f1d` | `insuniverse-admin` | 2026-07-01T21:54:48+09:00 | merge(stg): 기업관리자 조직권한 UI 반영 | 매치 | 불일치 |

5건은 **전건 2026-07-01** 이다. 그중 3건이 `merge(stg): prod 핫픽스 reconcile — stg↔prod 통일 준비`
라는 같은 문면을 3저장소에 걸쳐 갖는다(admin 1건만 뒤에 ` (충돌 0)` 이 붙는다).

> **방향은 제목에서 온 추정이다 (근거 등급: 추정).** 이 절이 실측으로 아는 것은 두 정규식의
> 판정과 커밋 제목뿐이다. 제목의 `prod 핫픽스 reconcile` 이 **prod → stg 역류**를 뜻한다는 것은
> 토폴로지가 아니라 문면에서 읽은 것이고, 이 문서도 M4 게이트도 그 방향을 증명하지 않는다.
> [03-divergence.md](03-divergence.md) 가 잠근 것은 **반대 버킷**이다 — `prod-hotfix-unreconciled`
> (prod 에만 있고 stg 로 돌아오지 *않은* 커밋 102건). 역류가 실제로 일어났다면 그 정본은
> 이 저장소에 아직 없다. 되돌아온 내용이 무엇인지도, 그것이 발산을 해소했는지도 여기서
> 판정하지 않는다.

---

## 이 연대기가 덮지 못하는 구간

릴리스 노트 커밋은 **8일**에만 있고 그 창의 폭은 **13일**이다. 인덱스가 담은 이력은 **708일**
이고 **6,190행**이다.

| 축 | 값 |
|---|---|
| 릴리스 창 distinct 일자 | 8 |
| 릴리스 창 | 2026-06-06 ~ 2026-06-19 (폭 13일) |
| 인덱스 이력 | 2024-08-27 ~ 2026-08-05 (폭 708일) |
| 인덱스 총 행수 | 6190 |
| 릴리스 창 안 커밋 | 264 |
| 릴리스 창 밖 커밋 | 5926 |
| 창 밖 중 이 문서가 분류한 커밋 | 5 |

창 안 264 + 창 밖 5926 = 총 6190 이다.

**창 밖 5926행 중 5921행에 대해 이 문서는 어떤 주장도 하지 않는다.** 나머지 5행은
§릴리스 노트를 닮았으나 아닌 5건 이 이름·제목·두 정규식 판정까지 싣는 2026-07-01 커밋이고,
릴리스 창(2026-06-06 ~ 2026-06-19) 밖이다 — 무주장 구간에서 **덜어낸다**. 무주장이란 그
구간에 릴리스가 없었다는 뜻이 아니라, 릴리스 노트 커밋이라는 이 문서의 축으로는 그 구간을
볼 수 없다는 뜻이다. 태그도 `refs/replace` 도 0이므로 다른 축을 대신 세울 수도 없다.

그래서 온보딩 질문 `Q28`(*"이 기능이 왜 이런 형태가 됐는지 역추적할 수 있는가"*)의 시점 축은
**이 문서 하나로 닫히지 않는다.** 남은 구간의 시점 역추적을 나눠 지는 자리는 둘이다.

- **형제 문서의 `## 연혁` 절** — 문서마다 자기 주제의 변경 시점을 `anchors[]` 계약으로 진다.
  그 계약은 `13-relation-contract` 마일스톤 5 가 얹었다.
- **`02-epics.md`** — `feat/*` 에픽 단위의 "왜" 를 서사로 남긴다. 이 PRD 의 마일스톤 5 소관이다.

---

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

### 릴리스 내용

**릴리스 노트 커밋의 `p1..p2` 델타를 균일하게 유도할 수 없다.** 병합 자신과 두 부모가 prod
1차 부모 사슬 위에 있는지가 저장소마다 갈린다. 아래 분포는 3저장소 `rev-list --first-parent
<locked prod tip>` 로 재유도한 값이다.

| 저장소 | 병합 자신 | 첫 부모 `p1` | 둘째 부모 `p2` | 건수 |
|---|---|---|---|---|
| `insuniverse-server` | 사슬 위 | 사슬 위 | 사슬 밖 | 24 |
| `insuniverse-site` | 사슬 밖 | 사슬 밖 | 사슬 위 | 7 |
| `insuniverse-admin` | 사슬 밖 | 사슬 밖 | 사슬 위 | 10 |
| `insuniverse-admin` | 사슬 밖 | 사슬 밖 | 사슬 밖 | 4 |

`p1..p2` 가 *들어온 stg 계보* 를 뜻하려면 `p1` 이 prod 계보 위에 있어야 한다. 그 조건이 성립하는
것은 server 24건뿐이다.

- **`p1` 이 사슬 밖인 건수 — 21.** 이 21건에 같은 방향을 그대로 적용하면 반대 집합을 싣는다.
- **두 부모가 다 사슬 밖인 건수 — 4.** 이 4건은 방향을 뒤집어도 답이 없다.

방향을 `parents_on_prod_first_parent` 로 갈라 쓰는 우회가 남지만 **그 필드가 빈 4건에는 답이
없다.** 빈 값을 한쪽으로 채우는 것은 추론을 사실로 쓰는 것이므로 하지 않는다.

그래서 이 문서는 릴리스 **내용**을 싣지 않고 릴리스 **시점과 제목**만 싣는다. 45건 전건이
제목 괄호 안에 내용 요약을 이미 들고 있고, 그것은 관측이지 유도가 아니다.

### 배포 승격

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

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

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

이 판정은 [03-divergence.md](03-divergence.md) 가 발산 축에서 이미 같은 결론을 냈다. 축이 다른
두 문서가 같은 이월(`id=60m3-deploy-verdict-out-of-scope`)을 공유하며, 그 이월은 이 창에서도
닫히지 않는다.
