# 90 · 연혁 — `feat/*` 에픽 경계

이 문서는 3저장소 이력에서 **`feat/*` 에픽의 경계**를 정본으로 싣는다. 에픽 이름 23건 ·
그 랜딩 114건 · 랜딩의 둘째 부모 계보에서 유도한 소속 커밋 185건 · 랜딩을 닮았으나 아닌
6건이 발행 범위다. **값은 리터럴이 아니라 유도값이다** — 게이트가 매 실행 인덱스와 3저장소 git
에서 재유도해 이 문서와 양방향으로 대조한다.

> **앞 두 창의 산출물을 다시 싣지 않는다.** 마일스톤 3 의 발산 257건과 마일스톤 4 의 릴리스
> 45+5건은 이 문서의 299건과 sha 교집합이 0 이다.

> **에픽 경계는 정책의 정본이 아니다.** 현행 정책 서술과 각 문서의 `## 연혁` 절은 형제 PRD 소관이고,
> 여기는 *언제 어느 브랜치가 메인라인에 들어왔는가* 만 적는다.

---

## 기준점

동결 HEAD 는 `docs/_meta/index/releases.yaml` `frozen_heads` 가 잠근 SHA 다. 로컬 `refs/heads/stg` 는
읽지 않는다 — 실측상 이미 이동했다.

| 축 | 값 | 유도 원본 |
|---|---|---|
| 동결 HEAD · insuniverse-server | `4d798f55f021d93c889725e50f18cbce20272fd1` | `releases.yaml` `frozen_heads` |
| 동결 HEAD · insuniverse-site | `767d1e441637b5cba759acbe1f928a47f17397eb` | `releases.yaml` `frozen_heads` |
| 동결 HEAD · insuniverse-admin | `fb001e1d26d342130cf9a8dc8fe5e8a64e1da9c8` | `releases.yaml` `frozen_heads` |
| 캡처 정규식 · merge_branch | `^Merge branch (?:'\|")(feat\/[^'"]+)(?:'\|")(?: of \S+)?(?: into (\S+))?\s*$` | 이 문서 §캡처 형식 3종과 랜딩 형식 2종 |
| 캡처 정규식 · merge_pr | `^Merge pull request #(\d+) from [^/\s]+\/(feat\/\S+)\s*$` | 이 문서 §캡처 형식 3종과 랜딩 형식 2종 |
| 캡처 정규식 · squash_like | `^feat: merge (feat\/\S+) branch\s*$` | 이 문서 §캡처 형식 3종과 랜딩 형식 2종 |
| 제목 매치 | 120 | 세 정규식을 3저장소 인덱스 제목에 전수 적용 |
| 랜딩 | 114 | 토폴로지 3조건의 고정점 |
| 랜딩을 닮았으나 아닌 것 | 6 | 같은 판정의 여집합 |
| 에픽 이름 | 23 | 랜딩 114건의 캡처 그룹 합집합 |
| 에픽 소속 커밋 | 185 | 랜딩의 `rev-list <p2> --not <p1>` |
| 랜딩 era | A 106 · B 8 | `commits.<repo>.jsonl` `era` |
| 소속 커밋 era | A 177 · B 8 | 같은 열 |
| 랜딩 판정 고정점 수렴 | 3 | 비누적 반복의 수렴 라운드 수 |

### 랜딩은 제목이 아니라 토폴로지가 정의한다

**제목 정규식은 브랜치 이름을 캡처할 뿐 랜딩을 판정하지 않는다.** 제목이 랜딩처럼 보이는 커밋
120건 중 6건이 에픽의 메인라인 진입이 아니었다. 랜딩은 셋을 다 만족하는 후보다.

1. 부모가 2개다
2. 목적지가 `feat/*` 가 아니다
3. **다른 랜딩의 p2 계보 안에 있지 않다**

조건 3 이 *첫 부모가 메인라인* 의 토폴로지 표현이고 자기 참조라 고정점으로 푼다. **배제를 누적하면
과잉 배제한다** — 매 라운드 배제 집합을 새로 만들되 배제 대상은 조건 1·2 를 통과한 후보 전체에서
고르고 계보 출처만 그 라운드의 랜딩으로 좁힌다. 이 정의역에서 3라운드에 수렴한다.

---

## 캡처 형식 3종과 랜딩 형식 2종

**캡처 3종과 랜딩 2종은 다른 수다.** 세 정규식은 제목 매치 120건을 전수·상호배타로 분류하고,
그중 랜딩을 내는 형식은 둘뿐이다.

| 캡처 형식 | 정규식 | 제목 매치 | 랜딩 | near-miss |
|---|---|---|---|---|
| merge_branch | `^Merge branch (?:'\|")(feat\/[^'"]+)(?:'\|")(?: of \S+)?(?: into (\S+))?\s*$` | 114 | 110 | 4 |
| merge_pr | `^Merge pull request #(\d+) from [^/\s]+\/(feat\/\S+)\s*$` | 5 | 4 | 1 |
| squash_like | `^feat: merge (feat\/\S+) branch\s*$` | 1 | 0 | 1 |

`squash_like` 형식은 랜딩을 **0건** 낸다. 유일한 표본이 near-miss 이기 때문이다. 그래도 **캡처
정규식에서 지우지 않는다** — squash_like 를 지우면 그 커밋이 §랜딩을 닮았으나 아닌 절에서도 사라져
배제 사실 자체가 기록되지 않는다. 캡처는 모집단을 여는 축이고 랜딩 판정은 그 뒤의 일이다.

### raw body 편중

본문 보유는 git `%B` 재유도값으로 센다. 인덱스의 `body_present` 는 trailer 정규화 **후** 의 구문
판정이라 두 값이 갈린다 — 그 사실 자체를 F-21 이 기록한다.

| 축 | raw body 보유 | body_present |
|---|---|---|
| 랜딩 | 4 / 114 | 3 / 114 |
| 에픽 소속 커밋 | 1 / 185 | 1 / 185 |

갈리는 행은 1건이다 — `112ef0a8d3fafbfb5bbca047640f4beed37a4f44`.

### `merge_branch` 축만 보면 잃는 이름

`merge_branch` 축 하나로만 이름을 뽑으면 distinct 20개가 나오고, 랜딩 이름 23개 중
4개가 그 축에 없다. 그 4개는 `merge_pr` 축에만 있다.

| 이름 | 랜딩 수 | 형식 |
|---|---|---|
| `feat/addPrimaryKey` | 1 | merge_pr |
| `feat/agency` | 1 | merge_pr |
| `feat/agency-crud` | 1 | merge_pr |
| `feat/client-auth` | 1 | merge_pr |

`.claude/meta/01-meta-search-report.md` 73 행이 `feat/*` 브랜치 머지를 8개로 적은 것은 이 축의
**상위 8 절단**이다. 그 8개의 계수는 이 창의 실측과 축자로 같고(`feat/courses`33 · `feat/sales-agency-channel`16 · `feat/advertisement`13 · `feat/loss-adjusting`11 · `feat/corp-org-permission`8 · `feat/log_treat`8 · `feat/car-insurance`6 · `feat/fcm-token`3),
8위 3 과 9위 2 사이에 동률이 없다. 즉 그 보고서는 자기 축 안에서 옳고, 8을 모집단으로 인용한 자리가
틀렸다.

---

## 랜딩 114건

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

### merge_branch — 110건

| sha | 날짜 | 제목 | 브랜치 |
|---|---|---|---|
| `5d6304bd77d211f1413d9d58868ae146af882a29` | `2026-07-02T14:27:22+09:00` | Merge branch 'feat/corp-org-permission' into stg | `feat/corp-org-permission` |
| `3c940210c91d74c4effe9baaf70c9af48ab344d0` | `2026-07-02T13:57:52+09:00` | Merge branch 'feat/corp-org-permission' into stg | `feat/corp-org-permission` |
| `66741e921571ac899e4a0aa2932492035954fe00` | `2026-07-02T13:44:22+09:00` | Merge branch 'feat/corp-org-permission' into stg | `feat/corp-org-permission` |
| `30e9210c415e23569cb8a193df58bc4bce3d4c15` | `2026-07-02T11:33:55+09:00` | Merge branch 'feat/corp-org-permission' into stg | `feat/corp-org-permission` |
| `44ea9c45fe721566c5344a873a69a97e79a9ac00` | `2026-07-02T11:23:40+09:00` | Merge branch 'feat/corp-org-permission' into stg | `feat/corp-org-permission` |
| `1929bb9e067c2563d141786269aad1830ca1392a` | `2026-07-02T11:06:46+09:00` | Merge branch 'feat/corp-org-permission' into stg | `feat/corp-org-permission` |
| `712ef4fba35c25e8ef1905a8548b0251278e1e82` | `2026-07-02T09:10:30+09:00` | Merge branch 'feat/corp-org-permission' into stg | `feat/corp-org-permission` |
| `0d1cfa01bf543099bbe56acf62a5fbbfae6854f1` | `2026-07-01T22:18:17+09:00` | Merge branch 'feat/corp-org-permission' into stg | `feat/corp-org-permission` |
| `dfda1509ce40d292b3a6c8382be503265dc5b8eb` | `2025-07-21T12:37:18+09:00` | Merge branch 'feat/log_treat' into dev | `feat/log_treat` |
| `27be3024a3ecedf6e2f9af75d982b7530b598b9b` | `2025-07-18T15:22:23+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `9f5d531d93b955dfac8abf239ad374ebe1d84213` | `2025-07-18T10:49:45+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `28ec1760b289787c195576a9843e9b50692523b8` | `2025-07-18T10:31:28+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `5e53b5d7cc8d81c613cb8bc0e33cd4b45ee84868` | `2025-07-16T16:39:00+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `270c5593bced804a34bcc56945d11ee3e77e897a` | `2025-07-16T10:44:16+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `c0885db014193e8cf4b713fead80f941188a4738` | `2025-07-16T10:12:15+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `2112e807b18daa2be4f8f6cb1022f8eee7e43081` | `2025-07-16T09:18:51+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `b9f1b6b9c90470a799e385f926f23b9984f002aa` | `2025-07-15T17:55:53+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `7f6789eeed0d4c15f37accbdd82afa2cf580e2ed` | `2025-07-15T12:05:41+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `3110ff057887cb08f80b186e436e94209c5cc2a5` | `2025-07-15T11:33:14+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `820dd72743022b60a5e535d5e532aee2f26eae5a` | `2025-07-15T10:47:22+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `f53f0cfd9bc96db84c42728323ab172a94671f9b` | `2025-07-15T10:21:52+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `6446cef38f56605ed294527636110f77926f5b47` | `2025-07-14T17:35:12+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `572bcf5d39c680f6520e85c811a33717549e463c` | `2025-07-14T17:20:38+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `ea76791ec1c1867c93dd261e1e2ca29c30864ad4` | `2025-07-14T17:00:02+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `b916b4b402a10c9a50034e240e7ba735d936e7d8` | `2025-07-14T15:16:10+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `03d859b12210ecdea79a2c30dd42715bbaa6d5a6` | `2025-07-14T12:08:19+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `d8e990819a3846c6d02658a3863c4ed7b6db424b` | `2025-07-10T18:54:12+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `28e2e447d8421d256abf2d6f75d9b134f7da36a0` | `2025-07-10T18:02:51+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `b6e0d6eee142ce583b2c995fe4c724dd663aca6c` | `2025-07-10T17:32:38+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `9171bae7a3f55b35fa4eeacb774675d1d007e8f1` | `2025-07-10T16:58:31+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `02171603961c902e4b051e3211aa16d2718b64a6` | `2025-07-10T14:15:53+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `db0d04f43dc991fcbcd09486b0e758ce132a2d47` | `2025-07-10T10:18:08+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `49b2183860c3dd8263a2ff5f7527c0b513a9f223` | `2025-07-10T09:42:55+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `531ec0a58b4d5c64728a87e3f45f171cf7a42a43` | `2025-07-09T17:59:32+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `51178024b2ba81db9d65a975c49fa8df78852ecf` | `2025-07-09T17:37:42+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `21349d2c18139d5cdd8ac558921ef82f36293b3f` | `2025-07-09T12:33:25+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `9752115656e9004e926f49aa1a3819e790e5c316` | `2025-07-08T10:41:27+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `18b30c63b4b67191265bbf287a105394ac5af932` | `2025-07-07T17:53:47+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `c23aa3a02148bbf689c24eab320f88e1a8c9256d` | `2025-07-07T17:19:42+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `dc82b2abcbe5699982093ab5fef4853bd14663b6` | `2025-07-07T15:35:19+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `cb6face1a48d589c1c5385be396dce32a2609ffd` | `2025-07-07T14:31:15+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `f6de234fb3e1862c40ca247ff1af44fab922b0a1` | `2025-07-07T11:59:42+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `07f8c4a9aad954e3bdea650eeb94f94e06618317` | `2025-07-03T14:48:31+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `e4c8a440dc73596404756178e89c54d7fa7ef775` | `2025-07-02T15:43:06+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `6a71cc0172398d0ef671527e7b9d1d30b372d41a` | `2025-07-01T11:39:46+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `4bb71ceaa93ba164816196edf576c3299e4e7c3b` | `2025-07-01T11:39:37+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `19832b0ea533a33a88cb1ba5ae553d3577f110e9` | `2025-07-01T11:07:32+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `96e3d524e0f95263f8ab764835d3b0b34c7e9d4a` | `2025-06-30T17:53:50+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `4c3c1b48d1875c429b66443346803a289c269c08` | `2025-06-30T12:07:54+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `2d5861221304452b55fbb770fa02bec0e5038c2b` | `2025-06-30T11:39:10+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `b8786deda76e504f210e1d5ee9b6871ceb0c2e24` | `2025-06-30T10:59:03+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `aba646a4da2891256fc22e54390e568f2f3860dd` | `2025-06-30T10:17:05+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `a6a9eb4c92716f323a0edbd6b2960ad81a77ca78` | `2025-06-27T11:41:54+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `43858adebd6dae6f41becda3facae57867c0ed7e` | `2025-06-27T10:50:36+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `5fae9372ebdb4f1f442d06edcf3f0fde43239fd7` | `2025-06-26T17:50:00+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `d501243b45233e9a97348fb21c227038a75b4b5d` | `2025-06-26T17:40:35+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `92a9223f7b839d5bc4ac44b6af2caf967d593aa2` | `2025-06-26T09:10:22+09:00` | Merge branch 'feat/sales-agency-channel' into dev | `feat/sales-agency-channel` |
| `4362072495e6882f1833e206a126ad4e5b5ba2f8` | `2025-06-20T17:34:09+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `8e74d22f43758c4a4668b3699d8b07055ce065fa` | `2025-06-20T16:00:32+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `dc01f63245c9a681af04d6b79a4dbec550c3e2de` | `2025-06-19T16:15:47+09:00` | Merge branch 'feat/courses' into dev | `feat/courses` |
| `6a21d18ca1a6f8ec0aeec592f70cdd68239ba437` | `2025-06-18T17:05:04+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `090529da1d8ad20b5d2ba3af57af36ec3429ff23` | `2025-06-17T16:10:14+09:00` | Merge branch 'feat/log_treat' into dev | `feat/log_treat` |
| `b808bd45682a2f88a4d5cba132749d5494b376a7` | `2025-06-12T16:10:32+09:00` | Merge branch 'feat/log_treat' into dev | `feat/log_treat` |
| `6a2f9dde3e4344dc926baf420b6df381c0a1c3a3` | `2025-06-12T10:29:31+09:00` | Merge branch 'feat/log_treat' into dev | `feat/log_treat` |
| `e2c6f232152040ea449cd4333a5e2cebc4186cb9` | `2025-06-11T16:38:11+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `a7c1d1a20fa45116020db19b683f6ab488d8fff3` | `2025-06-11T10:50:37+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `c92925419d07cb708f2fdcd1b66349762caca2a9` | `2025-06-10T16:08:57+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `c912b0ad8b941fcbd6dd3896bc0fedd99d962db3` | `2025-06-10T15:40:25+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `ace44b03e097e830c28cb86ba677fe7577f71622` | `2025-06-10T15:07:27+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `1618de43856acdb703ef5e78c767c0115ccefa4b` | `2025-06-10T10:46:39+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `2ccaae111b0347846bfd5a7442993fd904360b45` | `2025-06-10T09:16:57+09:00` | Merge branch 'feat/advertisement' into dev | `feat/advertisement` |
| `f8c1f49048813f35dab0a662d9f45a1647ffcda0` | `2025-06-09T10:38:36+09:00` | Merge branch 'feat/log_treat' into dev | `feat/log_treat` |
| `111fa53d85c7f07e28dbf9e15b50b9f17a0567ed` | `2025-06-05T17:03:54+09:00` | Merge branch 'feat/log_treat' into dev | `feat/log_treat` |
| `af5b54f133a907e73ff7e29b1e2c95967350f652` | `2025-06-05T10:56:09+09:00` | Merge branch 'feat/log_treat' into dev | `feat/log_treat` |
| `f6a0c890d18e895d558276b2637c4aef3d0b33ca` | `2025-06-05T10:29:34+09:00` | Merge branch 'feat/log_treat' into dev | `feat/log_treat` |
| `64260fe522c9cb0c462303de3de08a87cd28c5df` | `2025-04-07T14:40:12+09:00` | Merge branch 'feat/statistics-analysis' into dev | `feat/statistics-analysis` |
| `6723c827ed4f160546461e567d6512ce1b6c36a8` | `2025-04-03T16:53:00+09:00` | Merge branch 'feat/admin-auth' into dev | `feat/admin-auth` |
| `dc1de6566be391ec37a313cad695b63df41aae79` | `2025-04-01T17:22:46+09:00` | Merge branch 'feat/client-analyze' into dev | `feat/client-analyze` |
| `f09626aa4f4d2c530968cba1000d925dee3b6e13` | `2025-04-01T09:46:21+09:00` | Merge branch 'feat/loss-adjusting' into dev | `feat/loss-adjusting` |
| `544176bd5bea31f5db4607cba093e6bdef69aa3b` | `2025-04-01T00:10:54+09:00` | Merge branch 'feat/agency-scheduler' into dev | `feat/agency-scheduler` |
| `6344da57de6ac10df0abac6a9fcf52799c60aceb` | `2025-03-31T12:22:02+09:00` | Merge branch 'feat/loss-adjusting' into dev | `feat/loss-adjusting` |
| `4780ed87b2ec60636b1434520e32ab3fee26c9be` | `2025-03-28T17:42:48+09:00` | Merge branch 'feat/delete-schedules' into dev | `feat/delete-schedules` |
| `d99e282d9ed94966c378367f7254ea940d92f5ea` | `2025-03-28T15:49:51+09:00` | Merge branch 'feat/loss-adjusting' into dev | `feat/loss-adjusting` |
| `0a85180b633228615c470e6ee72e375864444b35` | `2025-03-28T11:26:43+09:00` | Merge branch 'feat/agency-settlement' into dev | `feat/agency-settlement` |
| `27b615e479aa48e0dc4d9f1abf4dfd866df30d84` | `2025-03-28T10:57:29+09:00` | Merge branch 'feat/client' into dev | `feat/client` |
| `188adf19ec983e50630cb5aa10ab6c8c171a59d8` | `2025-03-27T17:36:23+09:00` | Merge branch 'feat/agency-settlement' into dev | `feat/agency-settlement` |
| `332d2814e95d0887bb180b2e74a76ac435f2406a` | `2025-03-27T16:52:35+09:00` | Merge branch 'feat/client' into dev | `feat/client` |
| `f703aa1660234847b291304dbd2b4615e86893e4` | `2025-03-27T11:43:23+09:00` | Merge branch 'feat/agency-subscribe' into dev | `feat/agency-subscribe` |
| `700a563e38b47ba53e97330e94fc870e8d25d513` | `2025-03-24T11:22:36+09:00` | Merge branch 'feat/loss-adjusting' into dev | `feat/loss-adjusting` |
| `f5b57fe34ebfba586c333b9e8d8df3bf74e4c425` | `2025-03-24T11:04:23+09:00` | Merge branch 'feat/loss-adjusting' into dev | `feat/loss-adjusting` |
| `4b3c4e6efd066abcb3cc7290d5cb593b302fe4c7` | `2025-03-24T10:28:25+09:00` | Merge branch 'feat/loss-adjusting' into dev | `feat/loss-adjusting` |
| `2fd0d8c1e83ffa047abf65988e1dc30f1f53f682` | `2025-03-21T18:01:30+09:00` | Merge branch 'feat/loss-adjusting' into dev | `feat/loss-adjusting` |
| `c4a14dc1d027b0be63c8edf01a2abf2085c95cfd` | `2025-03-21T17:21:53+09:00` | Merge branch 'feat/loss-adjusting' into dev | `feat/loss-adjusting` |
| `44ff33a846569ca6d6bd5dbc5d6f2c3edd755c0c` | `2025-03-21T16:37:44+09:00` | Merge branch 'feat/loss-adjusting' into dev | `feat/loss-adjusting` |
| `e0ec1ae8315e8d164e8624b8962eaa34e79a0dac` | `2025-03-21T11:35:50+09:00` | Merge branch 'feat/fcm-token' into dev | `feat/fcm-token` |
| `86fbcbfcf28ef00425cbe3ea8436da53a9092b3a` | `2025-03-21T11:31:05+09:00` | Merge branch 'feat/agency-product' into dev | `feat/agency-product` |
| `c5ce6af585db9219fd79d50e5d99a141a7bb5c02` | `2025-03-20T12:02:08+09:00` | Merge branch 'feat/loss-adjusting' into dev | `feat/loss-adjusting` |
| `4ab84a69b5a6f179c783a78aee1a22f38903968e` | `2025-03-19T14:53:46+09:00` | Merge branch 'feat/loss-adjusting' into dev | `feat/loss-adjusting` |
| `24eba61189463b137868cd6db08e3c498790653a` | `2025-03-17T17:04:59+09:00` | Merge branch 'feat/hidden-insurance' into dev | `feat/hidden-insurance` |
| `70784b8302bda1d22f75366489d5707bac989ee9` | `2025-03-17T12:41:47+09:00` | Merge branch 'feat/client-analyze' into dev | `feat/client-analyze` |
| `80ec17d2ec66d821999f0befccbeea5333f460d5` | `2025-03-17T11:48:53+09:00` | Merge branch 'feat/fcm-token' into dev | `feat/fcm-token` |
| `93c8d6a42173e24251c9c8a78e5afdd47c3bad63` | `2025-03-17T11:14:16+09:00` | Merge branch 'feat/fcm-token' into dev | `feat/fcm-token` |
| `bb36bd3a14cdbbeb97f7da6ba9b346f5db36a907` | `2025-03-17T10:40:55+09:00` | Merge branch 'feat/hidden-insurance' into dev | `feat/hidden-insurance` |
| `7d311faf4106e2649d859d72a236b4a2c1d6c89a` | `2025-03-13T17:46:54+09:00` | Merge branch 'feat/car-insurance' into dev | `feat/car-insurance` |
| `0a0d5c9271c0f3434a87fee2049f043b8b87f0fb` | `2025-03-13T17:27:17+09:00` | Merge branch 'feat/car-insurance' into dev | `feat/car-insurance` |
| `02cdff8ad5ec76a912080e963858eeed7f18a065` | `2025-03-13T16:58:26+09:00` | Merge branch 'feat/car-insurance' into dev | `feat/car-insurance` |
| `b399bf4c744f1b4ad7caf3e704d121579b153c90` | `2025-03-13T16:32:10+09:00` | Merge branch 'feat/car-insurance' into dev | `feat/car-insurance` |
| `9b39baa4828271225309b33a607d8f1160c0f246` | `2025-03-13T16:02:11+09:00` | Merge branch 'feat/car-insurance' into dev | `feat/car-insurance` |
| `edafea3eb33f7d62aa33556c57e202072d2ac15b` | `2025-03-13T15:49:04+09:00` | Merge branch 'feat/car-insurance' into dev | `feat/car-insurance` |
| `3170d0ad1d5ab0f606a624726bc06fbaa40fc2ec` | `2024-11-19T16:56:22+09:00` | Merge branch 'feat/folder-structure' into dev | `feat/folder-structure` |

### merge_pr — 4건

| sha | 날짜 | 제목 | 브랜치 |
|---|---|---|---|
| `1a11e8e69c8f8c1c40c54c8974d117ce53978183` | `2025-03-13T09:43:01+09:00` | Merge pull request #6 from rsteam-organization/feat/client-auth | `feat/client-auth` |
| `112ef0a8d3fafbfb5bbca047640f4beed37a4f44` | `2025-03-12T18:59:30+09:00` | Merge pull request #7 from rsteam-organization/feat/addPrimaryKey | `feat/addPrimaryKey` |
| `f7c98b9b19c24f051c1d0e541a471382e8d4763f` | `2025-03-07T18:35:04+09:00` | Merge pull request #5 from rsteam-organization/feat/agency-crud | `feat/agency-crud` |
| `900e91f1dadd6fa9fa7d82ad0016473dd3e02eaa` | `2025-03-07T14:25:06+09:00` | Merge pull request #4 from rsteam-organization/feat/agency | `feat/agency` |

---

## 랜딩을 닮았으나 아닌 6건

제목은 랜딩의 모양인데 토폴로지가 아닌 것들이다. 배제 사유와 그 근거를 열로 함께 싣는다.

| sha | 날짜 | 제목 | 배제 사유 | 근거 |
|---|---|---|---|---|
| `1bc42d40bebb6644da86f393e2e41c08e78eee53` | `2025-07-16T16:37:22+09:00` | Merge branch 'feat/advertisement' of https://github.com/rsteam-organization/insuniverse-server into feat/advertisement | 목적지가 에픽 | `feat/advertisement` |
| `c7727691ad5b1c7723668a02292e9510a14760b7` | `2025-07-05T14:47:10Z` | Merge branch 'feat/sales-agency-channel' into dev | 부모 1개 | `baa0fdbde018a721cac1a08c9270a2b4743d9973` |
| `baa0fdbde018a721cac1a08c9270a2b4743d9973` | `2025-07-03T14:48:31+09:00` | Merge branch 'feat/sales-agency-channel' into dev | 부모 1개 | `07f8c4a9aad954e3bdea650eeb94f94e06618317` |
| `964b30f54127792800957132097b9d52980007a3` | `2025-05-13T17:28:20+09:00` | Merge branch 'feat/sales-agency' of https://github.com/rsteam-organization/insuniverse-server into feat/sales-agency | 목적지가 에픽 | `feat/sales-agency` |
| `ac30e7b0f8412868125267dd7aea8a2c487673d4` | `2025-03-13T09:41:46+09:00` | Merge pull request #8 from rsteam-organization/feat/client-analyze | 다른 랜딩의 p2 계보 | `1a11e8e69c8f8c1c40c54c8974d117ce53978183` |
| `767e6fa76f1a8b9e040e359147bfa9caa985be78` | `2024-11-19T16:57:41+09:00` | feat: merge feat/folder-structure branch | 부모 1개 | `3170d0ad1d5ab0f606a624726bc06fbaa40fc2ec` |

**이 분리로 이름 하나가 통째로 빠진다.** `feat/sales-agency` 는 3저장소 인덱스 전체에서
`964b30f54127792800957132097b9d52980007a3` 한 커밋에만 나오고 그 커밋이 자기 브랜치로 들어간다.

`767e6fa76f1a8b9e040e359147bfa9caa985be78` 의 유일한 부모는 79초 전 랜딩
`3170d0ad1d5ab0f606a624726bc06fbaa40fc2ec` 다 — 스쿼시 랜딩이 아니라 랜딩 **직후 후속 커밋**이다.

---

## 에픽 23건

`창` 은 그 에픽의 랜딩과 소속 커밋을 합친 일자 범위이고, `파일 표면` 은 소속 커밋이 건드린 distinct
파일 경로 수다. `최고 등급` 은 §why 근거 등급 의 3축을 그 에픽에 교차해 A>B>C 로 접은 값이다.

| 이름 | 저장소 | 랜딩 | 형식 | era | 창 | 소속 커밋 | 파일 표면 | 최고 등급 |
|---|---|---|---|---|---|---|---|---|
| `feat/addPrimaryKey` | server | 1 | merge_pr | A | 2025-03-12 ~ 2025-03-12 | 1 | 2 | A |
| `feat/admin-auth` | server | 1 | merge_branch | A | 2025-04-02 ~ 2025-04-03 | 4 | 17 | C |
| `feat/advertisement` | server | 12 | merge_branch | A | 2025-06-05 ~ 2025-07-16 | 17 | 17 | C |
| `feat/agency` | server | 1 | merge_pr | A | 2025-03-06 ~ 2025-03-07 | 4 | 16 | A |
| `feat/agency-crud` | server | 1 | merge_pr | A | 2025-03-06 ~ 2025-03-07 | 6 | 49 | A |
| `feat/agency-product` | server | 1 | merge_branch | A | 2025-03-21 ~ 2025-03-21 | 2 | 6 | C |
| `feat/agency-scheduler` | server | 1 | merge_branch | A | 2025-03-31 ~ 2025-04-01 | 5 | 38 | C |
| `feat/agency-settlement` | server | 2 | merge_branch | A | 2025-03-27 ~ 2025-03-28 | 6 | 23 | C |
| `feat/agency-subscribe` | server | 1 | merge_branch | A | 2025-03-27 ~ 2025-03-27 | 1 | 3 | C |
| `feat/car-insurance` | server | 6 | merge_branch | A | 2025-03-13 ~ 2025-03-13 | 6 | 4 | C |
| `feat/client` | server | 2 | merge_branch | A | 2025-03-27 ~ 2025-03-28 | 2 | 26 | C |
| `feat/client-analyze` | server | 2 | merge_branch | A | 2025-03-17 ~ 2025-04-01 | 5 | 39 | C |
| `feat/client-auth` | server | 1 | merge_pr | A | 2025-03-10 ~ 2025-03-13 | 10 | 61 | A |
| `feat/corp-org-permission` | server | 8 | merge_branch | B | 2026-07-01 ~ 2026-07-02 | 8 | 23 | B |
| `feat/courses` | server | 33 | merge_branch | A | 2025-06-12 ~ 2025-07-18 | 46 | 36 | C |
| `feat/delete-schedules` | server | 1 | merge_branch | A | 2025-03-25 ~ 2025-03-28 | 2 | 6 | C |
| `feat/fcm-token` | server | 3 | merge_branch | A | 2025-03-17 ~ 2025-03-21 | 3 | 2 | C |
| `feat/folder-structure` | site | 1 | merge_branch | A | 2024-11-18 ~ 2024-11-19 | 10 | 293 | C |
| `feat/hidden-insurance` | server | 2 | merge_branch | A | 2025-03-17 ~ 2025-03-17 | 2 | 4 | C |
| `feat/log_treat` | server | 8 | merge_branch | A | 2025-06-05 ~ 2025-07-21 | 10 | 11 | C |
| `feat/loss-adjusting` | server | 11 | merge_branch | A | 2025-03-19 ~ 2025-04-01 | 11 | 16 | C |
| `feat/sales-agency-channel` | server | 14 | merge_branch | A | 2025-06-25 ~ 2025-07-08 | 20 | 60 | C |
| `feat/statistics-analysis` | server | 1 | merge_branch | A | 2025-04-07 ~ 2025-04-07 | 4 | 4 | C |

**`insuniverse-admin` 은 랜딩이 0건이라 이 표에 나타나지 않는다.**
빈 저장소는 표에서 보이지 않으므로 계수로 적는다 — server 113 · site 1 · admin 0.

---

## why 근거 등급

**"왜"의 가부는 본문 계수가 아니라 저장소 자신의 등급표가 정한다.**
`.claude/meta/01-meta-search-report.md` §4 가 소스마다 등급과 **용도 제한**을 이미 판정해 뒀고,
이 문서는 그 판정을 따른다. `등급표가 정한 용도` 열은 그 표의 원문이다.

| 등급 | 소스 | 등급표가 정한 용도 | 에픽 축 안 실측 |
|---|---|---|---|
| **A** | `Merge pull request #N` | 리뷰를 거친 = 의도적 정책 변경 | 전체 48 (server 30 · site 5 · admin 13) · 랜딩 겹침 4 · p2 계보 1 |
| **B** | Era B 커밋 제목 | why 근거 (`(기획 요청)` 표기 있는 것 우선) | 에픽 축 안 8 (에픽 1개) · `(기획 요청)` 0 |
| **C** | Era A 커밋 제목 | 시점 추정용. 단독 근거 금지 | 에픽 축 안 176 (에픽 18개) |

에픽별 최고 등급이 **A 4 · B 1 · C 18** 이다. 그래서 판정이 둘로 갈린다 —
등급 A·B 가 닿는 5개는 등급을 표기한 서사를 쓰고, 등급 C 단독 18개는 재료만 싣는다.

> 등급표의 A행 `Merge pull request #N` 실측은 `server 30, admin 14, site 5` 로 적혀 있는데 이 창의
> 실측은 admin **13** 이다. 그 어긋남은 F-22 로 기록하고 원본은 그 파일 소유자가 고친다.

`(기획 요청)` 표기는 인덱스 전체에 **4건**뿐이고 전건 Era B 이며, 에픽 축 안에는 0건이다 —
등급표가 우선하라고 한 그 표기가 이 축에서는 근거로 서지 않는다.

---

## 등급 A·B 가 닿는 5건

아래 5개 에픽만 서사를 쓴다. 각 블록은 근거 등급과 **추정 여부 표기**를 기계 판독 가능한 형태로
달고, 인용 sha 는 그 에픽의 최고 등급 근거 집합 안에 있는 것만 쓴다.

### `feat/addPrimaryKey`

- 근거 등급: **A** · 추정 표기: 등급 A 근거 — 추정 아님
- 근거 sha: `112ef0a8d3fafbfb5bbca047640f4beed37a4f44`
- 근거 본문(git `%B`): feat: 디비 pull할 때 primaryKey 자동지정 되도록

DB pull 시 primaryKey 를 자동 지정하도록 바꾼 에픽이다. **이 랜딩이 `body_present` 와 raw body 가 갈리는 유일한 자리다** — raw `%B` 에는 본문이 있는데 인덱스 정규화가 그것을 trailer 로 접어 `body_present: false` 로 떨어뜨렸다(F-21).

### `feat/agency`

- 근거 등급: **A** · 추정 표기: 등급 A 근거 — 추정 아님
- 근거 sha: `900e91f1dadd6fa9fa7d82ad0016473dd3e02eaa`
- 근거 본문(git `%B`): 기업 테이블 추가 및 로그인 시 FC구분

기업 테이블과 로그인 시 FC 구분이 이 에픽에서 들어왔다. 등급 A 근거가 그 두 가지를 한 줄로 적고 있어 *무엇을* 넣었는지까지는 저장소가 말한다. *왜 그 시점에* 필요했는지는 이 축 밖이다.

### `feat/agency-crud`

- 근거 등급: **A** · 추정 표기: 등급 A 근거 — 추정 아님
- 근거 sha: `f7c98b9b19c24f051c1d0e541a471382e8d4763f`
- 근거 본문(git `%B`): Feat/agency crud 생성

대리점 CRUD 표면이 이 에픽에서 생겼다. 등급 A 근거는 `Feat/agency crud 생성` 한 줄이고, 그 이상은 적혀 있지 않다 — 이 문서는 그 한 줄이 말하는 범위까지만 서술한다.

### `feat/client-auth`

- 근거 등급: **A** · 추정 표기: 등급 A 근거 — 추정 아님
- 근거 sha: `1a11e8e69c8f8c1c40c54c8974d117ce53978183` · `ac30e7b0f8412868125267dd7aea8a2c487673d4`
- 근거 본문(git `%B`): 고객사 API 인증가드 생성

고객사 API 인증가드를 만든 에픽이다. 이 에픽의 소속 커밋 안에 **등급 A 가 하나 더** 있다 — `feat/client-analyze` 의 PR 병합이 메인라인이 아니라 이 브랜치로 들어갔고, 그래서 랜딩이 아니라 소속 커밋이 됐다(§랜딩을 닮았으나 아닌 6건).

### `feat/corp-org-permission`

- 근거 등급: **B** · 추정 표기: 등급 B 근거 — 등급표가 정한 why 근거 용도 안의 추정
- 근거 sha: `5d6304bd77d211f1413d9d58868ae146af882a29` · `3c940210c91d74c4effe9baaf70c9af48ab344d0` · `66741e921571ac899e4a0aa2932492035954fe00` · `30e9210c415e23569cb8a193df58bc4bce3d4c15` 외 12건

이 문서에서 **유일한 Era B 에픽**이고 유일한 등급 B 서사다. 소속 커밋 8건이 전부 2026-07-01~02 이틀에 몰려 있고 제목이 관례 형식을 따른다 — 등급표가 Era B 제목에 부여한 *why 근거* 용도가 서는 자리다. 다만 `(기획 요청)` 표기는 이 에픽 안에 **0건**이라, 등급표가 우선하라고 한 그 표기는 근거로 쓸 수 없다.

---

## 에픽 소속 커밋 185건

랜딩의 둘째 부모 계보에서 유도한 커밋 전건이다. **계수로 접지 않는다** — 인덱스에 부모 관계가 없어
이 집합은 살아 있는 git object database 가 있어야만 재구성되고, 계수만 맞추면 다른 커밋을 배정한
오류가 통과한다. 중복 배정은 0건이다.

### `feat/addPrimaryKey` — 1건

| sha | 날짜 | 제목 |
|---|---|---|
| `74c636013cf2d51d46fb0b5ddbf143f9623e95ea` | `2025-03-12T18:08:02+09:00` | feat: 디비 pull할 때 primaryKey 자동지정 되도록 |

### `feat/admin-auth` — 4건

| sha | 날짜 | 제목 |
|---|---|---|
| `48c791c3ef977c944250c1b7730007cca872683a` | `2025-04-02T14:50:06+09:00` | feat: 권한 관리를 위한 메뉴 기능 작업 |
| `4919d2d169079479554749d6c357b8949a10e8d0` | `2025-04-02T14:50:44+09:00` | Merge remote-tracking branch 'origin' into feat/admin-auth |
| `afdbf4df0aae7db6ecb506327491caf4b991b6c9` | `2025-04-03T09:44:55+09:00` | feat: 권한 관리 작업 진행중 |
| `644f841b555ef8a569d70e0401e04d70dd3f95fd` | `2025-04-03T16:52:28+09:00` | feat: 관리자 권한 기능 작업 |

### `feat/advertisement` — 17건

| sha | 날짜 | 제목 |
|---|---|---|
| `866f53922a63f117b54dcc097830cadf63a21ee4` | `2025-06-05T16:03:39+09:00` | feat: 관리자 광고 생성 기능 작업 |
| `999c519e5ebb4ca059fad3394c8653472d7e3ffb` | `2025-06-09T09:26:59+09:00` | feat: 광고동영상 목록 작업 진행중 |
| `f9c2130868bf489836c6225294356b58b7b31d60` | `2025-06-10T09:16:23+09:00` | feat: 관리자 광고 관리 목록, 상세 작업 |
| `11c0f0d4c03d5d0fc6bc2520a740b35056ed7976` | `2025-06-10T10:46:06+09:00` | chore: 관리자 광고 수정, 삭제 추가 및 등록 기능 수정 |
| `15e0a931af1dc6780675135e0a363b1ded0e696e` | `2025-06-10T15:06:25+09:00` | chore: 생성 및 수정시 adsImg Optional 추가 |
| `63fd9d61a0f8f5407bc61c7b375675bdb52dff12` | `2025-06-10T15:39:09+09:00` | chore: adsSort 필수값 제거 |
| `c7c3dacf3a8c3fb2468b6309c4d0381b4b24e870` | `2025-06-10T16:08:34+09:00` | feat: 광고 상세 광고통계 탭 API 작업 |
| `f7dc172911dfe5361c2394843cebb3d98ec16119` | `2025-06-11T10:50:14+09:00` | chore: 관리자 광고통계 count string으로 넘어가지 않게 수정 |
| `f90da31f2dd9dd54090011261f9cb62d518c5e8a` | `2025-06-11T16:37:47+09:00` | feat: 유저 광고 조회 API, 클릭수/재생수 증가 API 추가 |
| `8a4f443a927b515c2892e063d01ad749377659f0` | `2025-06-18T17:04:47+09:00` | chore: 유저 광고 목록에 id값 리턴 수정 |
| `c4d95efff18ed86b6b9cedd668ab9523e1cf94ed` | `2025-06-20T15:59:54+09:00` | chore: 일반회원 검색조건에 기업 광고 들어가지 않도록 조건 수정 |
| `5f1d7b5f6a641b305822f1f6085c6032e6042f82` | `2025-07-01T11:39:11+09:00` | chore: 광고 관리 목록에 동영상 및 이미지 링크 추가 |
| `3aec1e86af206adbbfe7110c0749f94792e2f7c9` | `2025-07-02T15:42:28+09:00` | chore: 관리자 광고 검색조건 변경 및 유저 노출수 증가 API 수정 |
| `80c8cee163580695fb9b2dfee3c8e93344dcfe58` | `2025-07-02T16:39:32+09:00` | chore: 유저광고 목록 파라미터 수정 및 관리자 검색조건 수정 |
| `f826a107ffab2cf11e3ee6175adafc5e38a319c7` | `2025-07-16T16:36:59+09:00` | chore: 관리자 광고 관리 검색조건 랜덤여부, 외부링크여부 수정 작업 |
| `1bc42d40bebb6644da86f393e2e41c08e78eee53` | `2025-07-16T16:37:22+09:00` | Merge branch 'feat/advertisement' of https://github.com/rsteam-organization/insuniverse-server into feat/advertisement |
| `e4627725210126bb30f831e73b9751bfcf802e65` | `2025-07-16T16:38:17+09:00` | git ignore rollback |

### `feat/agency` — 4건

| sha | 날짜 | 제목 |
|---|---|---|
| `ee9268c838e7137d5b422425ed78e10b81caa2e8` | `2025-03-06T12:39:03+09:00` | feat: 기업 초기모듈 생성 |
| `b93e901b988d1a0569da9ed1711050fd64e2968a` | `2025-03-06T12:39:34+09:00` | fix: 명칭 변경 (대리점 -> 기업) |
| `f8fd06d87fbe9e793f35b01742d7f404f6b0890e` | `2025-03-06T16:56:59+09:00` | fix: 로그인 시 FC구분값 추가 |
| `30d33f1188e3c5506c8de27bb55df2fc6005dc9a` | `2025-03-06T16:59:13+09:00` | fix: 로그인 시 반환값에 FC구분값 추가 |

### `feat/agency-crud` — 6건

| sha | 날짜 | 제목 |
|---|---|---|
| `cb91e88ae2f7265e85093de5cbd4abd6e046c992` | `2025-03-06T17:28:23+09:00` | feat: 기업 crud 추가 |
| `d9cb08206b508f24be0747b95f830bfc0bca890c` | `2025-03-07T12:09:25+09:00` | fix: 관리자 특정 메뉴 기업명 검색조건 추가 |
| `df0e5198e6addf1327ca61a80274734bb19c8e99` | `2025-03-07T12:26:01+09:00` | fix: 기업 모듈 폴더위치 변경 |
| `671341667a8b4ab471321a8cb68748095536fb9a` | `2025-03-07T17:44:24+09:00` | feat: 기업계약정보 crud |
| `0599e862d68aa40ff0fe72925956b8dfcf77e1c6` | `2025-03-07T17:53:33+09:00` | feat: 기업 계약목록 등록/수정 시 사용될 선택박스용 전체조회api 생성 |
| `19c16dffe3d64f23763cb28eb7e6d4d9434fc734` | `2025-03-07T18:18:49+09:00` | feat: 계약종료여부도 반환하도록 |

### `feat/agency-product` — 2건

| sha | 날짜 | 제목 |
|---|---|---|
| `c0f966436199953595360853a1c749e622d527c6` | `2025-03-21T10:44:42+09:00` | fix: 분석/구독관리에 체험상품만 노출되지 않도록 |
| `78d950d35c253fbd6f907ab5c7c0a4445bc9e3c0` | `2025-03-21T11:30:35+09:00` | feat: 기업FC 개별등록 생성 |

### `feat/agency-scheduler` — 5건

| sha | 날짜 | 제목 |
|---|---|---|
| `6ca55059333977a77699248fb3e8a2307221c2e6` | `2025-03-31T14:32:59+09:00` | feat: 기업FC 정기구독 스케줄러 |
| `42f9cbdc1d4e4ee1675e9c92f918e2d04546f2ec` | `2025-03-31T14:53:50+09:00` | refactor: subscribe폴더위치 변경 |
| `c85683c89494909896c96c44f0fb7d5341a37acc` | `2025-03-31T18:22:13+09:00` | feat: 구독실패조회 |
| `e10b4ba81ef8ee13f55f5285af21d8e2fdf6115a` | `2025-03-31T23:08:27+09:00` | fix: test코드 제거거 |
| `f4113535b4c9102be0f7a06315c8412f3bcf89df` | `2025-03-31T23:09:01+09:00` | feat: 실패구독들 재구독처리 |

### `feat/agency-settlement` — 6건

| sha | 날짜 | 제목 |
|---|---|---|
| `15b37258cade1b60385dde36a6f3fe19486c9912` | `2025-03-27T17:21:05+09:00` | feat: 기업정산 스케줄러(스케줄러 설정 필요) |
| `a225f41db4b88283a3789fc8ed15dbb03cf8add2` | `2025-03-27T17:35:38+09:00` | fix: 최초구독 유효성검사 조건값 수정 |
| `7824ce1454387f8d0ad2b5c34a7020ad879a679a` | `2025-03-28T09:28:45+09:00` | refactor: 정산 폴더구조변경 |
| `de1a0b96c43f53290e81a74112b3bd6033dbecc6` | `2025-03-28T11:12:26+09:00` | refactor: method name |
| `022c0b77ac3a389bfad997aa2c8b0a73eccade53` | `2025-03-28T11:13:22+09:00` | feat: 기업정산 목록/상세 조회 |
| `3b9dcbf2ad0b79e3393bbac7c75eb7703bf04077` | `2025-03-28T11:26:13+09:00` | feat: 기업 정산 입금/입금철회처리 |

### `feat/agency-subscribe` — 1건

| sha | 날짜 | 제목 |
|---|---|---|
| `f94618d3de8af763927a923847f69d4418cb7fe3` | `2025-03-27T11:37:42+09:00` | fix: 계약기간 수정 시 중복검사 수정 |

### `feat/car-insurance` — 6건

| sha | 날짜 | 제목 |
|---|---|---|
| `2203332ee77b715c1ea626a76b8ccfb58ab05155` | `2025-03-13T15:47:23+09:00` | chore:진료기록(자동차보험) 데이터가 있을 때만 저장 로직 타도록 수정 작업 |
| `c2891261a0a36368e0aa156f4cacead129cfdcd1` | `2025-03-13T16:01:39+09:00` | chore: 진료정보(자동차보험) response 데이터 길이 확인 |
| `1b3dd76f16a0c6510b9e7ce76cfa6223c10a8638` | `2025-03-13T16:30:45+09:00` | chore: 분석 로직 진행중 자동차 진료정보가 없을 경우에 대한 처리 |
| `7f6b5f84c23b22719667af95dc85bd99baf2b6bf` | `2025-03-13T16:57:54+09:00` | chore: 분석진료정보(자동차보험) API 오타 수정 |
| `df674b87ad4d397cd8e857834460305260afbb8e` | `2025-03-13T17:26:34+09:00` | chore: 분석 API 내부 DB 트랜잭션 수정 |
| `7a9f0eee0c16bc2684b39ca7ae0fde9329603c8f` | `2025-03-13T17:45:57+09:00` | feat: 분석데이터(자동차보험) 관리자 API 추가 |

### `feat/client` — 2건

| sha | 날짜 | 제목 |
|---|---|---|
| `1f1e2cfeeba8bc7d7af53243109ee7fc4427a9c2` | `2025-03-27T16:50:56+09:00` | feat: 관리자 고객사 관리 추가 작업 |
| `ec6765a39bd15e7343917db86a10f1586355d509` | `2025-03-28T10:57:00+09:00` | feat: 고객사 계약 관리자 기능 추가 작업 |

### `feat/client-analyze` — 5건

| sha | 날짜 | 제목 |
|---|---|---|
| `bf64e84a55b9ae0c8da3be9ef10c612dbc49549d` | `2025-03-17T12:17:38+09:00` | fix: 고객사용 interceptor, filter생성 및 기존 interceptor, filter수정 |
| `6f67fb8b8cf0fa609499591ec08cd4075b6268e8` | `2025-03-17T12:40:11+09:00` | fix: 고객사 분석결과 조회 시 값이 없는 경우 빈 배열 반환 |
| `b174f15adf2ea5553ce87835c3bee70792372372` | `2025-04-01T16:16:29+09:00` | fix: client 놓친부분 수정 |
| `25e35feeb5ff396223741cb681c1f9b053b09e17` | `2025-04-01T17:17:58+09:00` | refactor: client 모듈 분리 |
| `6e87b1f4d46275f2b644d2c7d4470b13eff3294c` | `2025-04-01T17:21:19+09:00` | fix: 컬럼명 수정 |

### `feat/client-auth` — 10건

| sha | 날짜 | 제목 |
|---|---|---|
| `9fa2ee88a744f3b5fe5a00dcd7b429423fb160ad` | `2025-03-10T10:13:08+09:00` | refactor: auth 폴더구조 변경 |
| `3fb292ba55a77c01e584e90907e23ba23bca727d` | `2025-03-11T12:40:07+09:00` | Merge branch 'dev' of https://github.com/rsteam-organization/insuniverse-server into feat/client |
| `36ea37f64445ed4433515b9e75931c5273babe16` | `2025-03-11T12:40:23+09:00` | feat: 고객사 인증단계 추가 |
| `a94e864de599452e686aefcef120c38ce327810c` | `2025-03-11T15:13:12+09:00` | Merge branch 'dev' into feat/client-auth |
| `cfde2bbee62c0b97ea6ca65bd0cc628000aa5c3a` | `2025-03-11T15:33:16+09:00` | chore: client tables db pull |
| `0b800ee7968f706fe95543b822d777063d3b4a84` | `2025-03-11T15:33:26+09:00` | feat: client 초기모듈 생성 |
| `c576ab1666a5c21ed2d1856d8f91872f5ed8eb81` | `2025-03-12T17:54:25+09:00` | feat: client 분석요청api 구현 (리팩토링X) |
| `955930a6f5d9a9b57d01f6fd6df0145138fda7b3` | `2025-03-13T09:21:51+09:00` | Merge branch 'dev' into feat/client-analyze |
| `d445dbd48ac594e43b2fb979a710adf13189639c` | `2025-03-13T09:27:45+09:00` | comment: 주석수정 |
| `ac30e7b0f8412868125267dd7aea8a2c487673d4` | `2025-03-13T09:41:46+09:00` | Merge pull request #8 from rsteam-organization/feat/client-analyze |

### `feat/corp-org-permission` — 8건

| sha | 날짜 | 제목 |
|---|---|---|
| `e0eb4683e2c41e9f977a60ff9d8eb399824acbb7` | `2026-07-01T22:17:51+09:00` | fix(org): 조직 목록 회원수 서브쿼리 상관참조 수정 (raw→drizzle 컬럼, org별 정확 집계) |
| `da3fd31c315d55f8a4ec8531d75d5d5f8b1b899a` | `2026-07-02T09:10:28+09:00` | fix(org): 조직 목록 회원수 집계를 org별 groupBy로 교체 — 상관 서브쿼리 폭증(183611) 수정 |
| `e899f9129740406bedb1b7bbae5634934b7a1c73` | `2026-07-02T11:06:44+09:00` | feat(org): 조직코드 DTO 형식 검증 추가 - 영문/숫자/하이픈/언더스코어만 허용 |
| `a4ccfc48df00edbe60b05445d380b5126c6885da` | `2026-07-02T11:23:35+09:00` | fix(corp): 권한 재검증 보강 3건 - 고객 엑셀다운로드 corp 스코프 누락, 머니지급(issue) corp 개방+자기기업 강제, 조직목록 ORG 부분트리 필터 |
| `02608f10b4e8541598b3952f799a3621d08ef695` | `2026-07-02T11:33:53+09:00` | feat(org): 조직코드 필수값 승격 - 생성 필수, 수정 시 비우기 불가 |
| `23e0663e93aac53164607c0e2fbc0148b0806c4e` | `2026-07-02T13:44:21+09:00` | feat(org): 구독/주문/분석 목록·다운로드에 조직 필터(orgId, 부분트리)와 소속조직 전체 경로(orgFullPath) 추가 - FC 목록/상세 포함 |
| `74feddb251ade4b3baf96ad74d21329b6ab326bd` | `2026-07-02T13:57:50+09:00` | feat(org): 다운로드 엑셀에 소속조직 컬럼·전체 경로 병합 추가 - 구독/주문은 배열 병합, 분석은 keyset 배치 병합+캐시 |
| `404186c892a840042ceb3da4a19774fe8cfb61c6` | `2026-07-02T14:27:21+09:00` | feat(org): 조직 상세에 조직관리자 목록(복수) 읽기 표시 추가 |

### `feat/courses` — 46건

| sha | 날짜 | 제목 |
|---|---|---|
| `dfc7b0cdc8bdb2d919ff07b4052bfe2a66637678` | `2025-06-12T15:34:51+09:00` | feat: 관리자 강의 목록 조회 기능 추가 |
| `71b394ddb42e76a723d0197c0d4ccc16ee825051` | `2025-06-18T17:02:43+09:00` | chore: 등록 기능 이미지 등록 수정 작업 |
| `bc0a597382602ae93750fe62246b670ae4763675` | `2025-06-19T10:30:11+09:00` | chore: 강의 관리 수정 기능 작업 진행중 |
| `e3702116c566e1834a2f6c0da8212646383db20c` | `2025-06-19T16:15:05+09:00` | feat: 강의 관리 수정, 삭제 기능 추가 작업 |
| `a0f71d4a4fb03dc85245d38a2efd4a1e418cab7f` | `2025-06-20T09:08:45+09:00` | feat: 관리자 강의 수강평 작업 진행 중 |
| `9601b6aa626005c5776c0d5bc6b2125ec2b97423` | `2025-06-20T15:53:43+09:00` | chore: 강의 상세보기 작업 진행 중 |
| `e3d7b3a72c60a7678b9e1c04764e779b0f112c30` | `2025-06-20T17:12:35+09:00` | feat: 강의 상세 처리 |
| `fb4713900c8752da0cac230a9beaf7a64625e319` | `2025-06-20T17:33:52+09:00` | feat: 강의 수강평 관리 기능 작업 |
| `c27e974ae5aa21cfdaa2fede4cfe6954aa67e9f1` | `2025-06-26T17:40:15+09:00` | chore: 강의 옵셔널 필요 파라미터 수정 |
| `cadf9a9ea93032f76ab28f00c5661bece73a0f01` | `2025-06-26T17:49:42+09:00` | chore: courese null 처리 수정 |
| `74fa0e4d4105d509d9048bd2f56870f7df4ee7ac` | `2025-06-27T10:48:56+09:00` | chore: 강의 관리자 카테고리 필수여부 변경 |
| `3cefd0cc74144dde99d80210513eb6e0128eb318` | `2025-06-27T11:27:46+09:00` | chore: 강의 목록에서 강의 카테고리 값 return 수정 |
| `ef970dfb9d427797eab559e293db706b3331e90d` | `2025-06-27T11:41:32+09:00` | chore: 강의 관리 수정시 강의 카테고리 처리 수정 |
| `7c7729a03ff209438ce1c97f773d41657bc36e22` | `2025-06-30T10:58:43+09:00` | chore: 강의 카테고리는 null 허용이기때문에 삭제시 참조키 처리방식 변경 |
| `563814512eb1668950f3a6c765fb850e4320f1f2` | `2025-07-09T12:14:01+09:00` | feat: 내 수강평 기능 작업 |
| `b734d8cbc6ab54e9cfb770e73c66dcc54eaf7b2a` | `2025-07-09T12:33:12+09:00` | chore: 강의 카테고리 전체 swagger 수정 |
| `3539cdc2eaf8df981bd1409f1ac8148971f95ae6` | `2025-07-09T17:37:17+09:00` | chore: 강의 목록 return 값 수정 및 memId 관련 파라미터 수정 작업 |
| `c77be69ea3daf08f342949b707c9bb267e17c1e0` | `2025-07-09T17:59:19+09:00` | chore: 강의 목록 검색조건 수정 및 강의 수강평 등록 작업 |
| `de108ffb5c29279200f397355abe33a92a6bef1e` | `2025-07-10T09:42:02+09:00` | chore: 강의 목록 검색조건 및 강의 수강 수정 작업 |
| `fbc67e4735f34ae52ef59366c7a51d6b5e4e8ccb` | `2025-07-10T10:00:11+09:00` | chore: 강의 책갈피 목록 response 값 수정 |
| `ba57928a532537ed6b48a4af175d952e10157eae` | `2025-07-10T10:17:52+09:00` | chore: 강의 영상 진행율 swagger 명칭 수정 |
| `439a4ff717fc1c3d5aefd6b8bb1ceeecb3af97d3` | `2025-07-10T12:35:15+09:00` | chore: 강의 관리자 수강평 노출여부 변경 작업 |
| `87a9c420801740ce5ea37e6f09131a065d934811` | `2025-07-10T16:57:24+09:00` | chore: 강의 수정 작업 |
| `f1c1a49458de88998145bd38547f18ef790faa7d` | `2025-07-10T17:32:13+09:00` | chore: 내 수강평, 내 강의 유저 API response 추가 작업 |
| `02578f8c239a5f8e3321ccfc7c1c57c7052dbf1c` | `2025-07-10T18:01:54+09:00` | chore: 개발환경에서 오류 jwt 처리 |
| `810babe096a3011924406d12ba68ac14422bc905` | `2025-07-10T18:53:53+09:00` | chore: memId token에서 가져오던 부분 개발환경에서 동작 문제로 프론트에서 전달 하도록 수정 |
| `d62839d5419835702772d5690e66746e1b27f6d4` | `2025-07-14T09:41:16+09:00` | chore: 강의상세 책갈피 추가 작업 |
| `7deba51641baa0878f7a10d40c95542a8141ca70` | `2025-07-14T12:07:41+09:00` | chore: 최종시청영상 저장 API 추가 및 강의 상세, 내강의 최종시청영상ID response, 책갈피 response 수정 |
| `7d8cd53ad6f208522b8c3ab336218b7f7bd894f6` | `2025-07-14T15:14:01+09:00` | chore: 강의 관리자 수정 작업 |
| `4215e80750072d4ac4ad197484577f698162591f` | `2025-07-14T16:59:39+09:00` | chore: 내강의 강의 return 중복 제거 및 progress 계산 수정 작업 |
| `9be4b54608d640cf83f9dd6ae3fa3f6044b9dbab` | `2025-07-14T17:08:01+09:00` | chore: 수강평 관리자 영업대리점 검색조건 수정 |
| `657056a1aaa80b74f1e05a074f2e4b9f8e281028` | `2025-07-14T17:33:42+09:00` | chore: 카테고리 미노출시 해당 카테고리 사용 강의도 미노출되도록 조치 |
| `63f5cfd892208e382272c4953c10dd16490e6083` | `2025-07-15T09:37:36+09:00` | chore: 강의 카테고리 필수값 변경 |
| `630a9b1ede66612f576491a6abead3fe30fd375b` | `2025-07-15T10:21:10+09:00` | chore: 강의 삭제시 실제 데이터 삭제아닌 컬럼 처리 및 내강의, 책갈피에 삭제여부 response 추가 |
| `ea4cd5d2a5b6493e0293b0e2ec6d5ad0dc15571f` | `2025-07-15T10:46:42+09:00` | chore: 강의 등록, 수정시 오류 수정 |
| `76746c5b50a1a5c45d137a1628eb8a9fdac559dc` | `2025-07-15T11:32:41+09:00` | chore: 강의 상세에 reviewCount 추가 |
| `4f4eff28c6d5e6fe603cbf6d94a23651c92fe1cb` | `2025-07-15T12:05:25+09:00` | chore: 내강의 정렬 조건 변경 및 강의 최종시청 영상 저장시 내강의 updateAt 갱신 |
| `688c5ceaff18c2ae57807acdddd6bb830141ee15` | `2025-07-15T17:23:51+09:00` | chore: 내수강평 목록 response에 삭제여부 추가 |
| `ad819d1d665f2292e122cc333bfb46fe3b72ec35` | `2025-07-15T17:55:37+09:00` | chore: 강의 카테고리 삭제시 참조된 카테고리일 경우 에러코드 respone |
| `c1480e0422939c378e03d420673d29fbec8f0743` | `2025-07-16T09:18:35+09:00` | chore: 수강평 관리자 상세 API 수정 작업 |
| `f4fdcc43f37218d5c3885f7252d77ea990f80ffb` | `2025-07-16T10:11:56+09:00` | chore: 강의 상세 및 목록 수강평 비노출 카운트 되지 않도록 조치 |
| `df9d706f02ea059e120a2d532e635adf16717584` | `2025-07-16T10:43:47+09:00` | chore: 강의 상세 호출시 sql 에러 수정 작업 |
| `d3138a6232b9a7daf49aee628ead22bfbc31293b` | `2025-07-16T11:07:59+09:00` | chore: console 제거 |
| `4eee9a15ae828d5c77db1ca61ac131080bebe432` | `2025-07-18T10:29:12+09:00` | chore: 강의 영상 재생버튼에 대한 처리 로직 변경 |
| `462e6d0272f0858c291848206fdbb45499d96490` | `2025-07-18T10:49:07+09:00` | chore: 재생영상을 위한 쿼리 조회 오류 수정 작업 |
| `ae3bb31633585db6fc9e2711cca0aafd0cb57267` | `2025-07-18T12:30:57+09:00` | chore: 불필요 console 제거 작업 |

### `feat/delete-schedules` — 2건

| sha | 날짜 | 제목 |
|---|---|---|
| `0a036d0d8325743dbb53fa99c219c27e5dc6538a` | `2025-03-25T14:39:29+09:00` | feat: 분석결과 1년 후 삭제 스케줄러 기능 작업 |
| `a2b3ba40aa64c6bf248ff1e3d922628ce2957213` | `2025-03-28T17:38:05+09:00` | feat: 탈퇴 회원 1년 후 데이터 삭제 스케쥴러 기능 작업 |

### `feat/fcm-token` — 3건

| sha | 날짜 | 제목 |
|---|---|---|
| `17439e9a204df820c715426983a2dc0b39da39fe` | `2025-03-17T11:12:38+09:00` | feat: 앱에서 푸시 알림 테스트를 위해 알림 테스트 API 추가 |
| `c242323ba8e55f1fba1de73266569b77d49ecacb` | `2025-03-17T11:48:07+09:00` | chore: fcm 푸시 baseUrl 오타 수정 |
| `ba5cbab70b9b740ef71f8c763d85d7602cce0a28` | `2025-03-21T11:35:24+09:00` | chore: fcm 토큰 발송 기능 fcm token 존재여부 확인 추가 |

### `feat/folder-structure` — 10건

| sha | 날짜 | 제목 |
|---|---|---|
| `253e78ee163d7bbb041386c5a975e99b66d86934` | `2024-11-18T09:42:19+09:00` | WIP: auth page |
| `88aa268705891994d752153518246488ef2c9145` | `2024-11-18T10:01:44+09:00` | WIP: search page |
| `5f79a01f8de09f84c863d664c95198ce5a3dd2fd` | `2024-11-18T11:52:02+09:00` | WIP: customer page |
| `4892fc9aeffd232e8773e50d024e84a082325910` | `2024-11-18T12:45:14+09:00` | WIP: analyze page |
| `265635bd422cc10621a87c63cdb3afd2a6b86504` | `2024-11-18T16:23:28+09:00` | WIP: analysisList page |
| `289cc7474c360118c63bf8c38573646990f080c7` | `2024-11-19T14:29:58+09:00` | WIP: analysis detail&subdetail page |
| `9270738f04cb2489f5918f62a6ebaf2e86ad96b2` | `2024-11-19T16:33:42+09:00` | WIP: init invoices page |
| `9c01d3a5909f8fc304b2f4eff2af8a89b2e31b34` | `2024-11-19T16:34:10+09:00` | WIP: merge css |
| `0ab269c170bf9f2c07ca5d7dcaac9b54af3c0c9b` | `2024-11-19T16:42:21+09:00` | WIP: analysis subdetail page, rm modal markup |
| `6a692213796da0a51f89ea2485eb9c7f6cbc2da4` | `2024-11-19T16:55:54+09:00` | WIP: rm mypage |

### `feat/hidden-insurance` — 2건

| sha | 날짜 | 제목 |
|---|---|---|
| `9659e80f44e96a833a1473a8745f4002fde62706` | `2025-03-17T10:39:18+09:00` | feat: PDF 다운로드를 위한 분석데이터 숨은보험금 탭별 전체 데이터 조회 API 작업 |
| `ed5e6e5f048b539053ab361c6862413750f36b86` | `2025-03-17T17:03:52+09:00` | chore: PDF 다운을 위한 숨은보험금 전체 목록 response 값 수정 작업 |

### `feat/log_treat` — 10건

| sha | 날짜 | 제목 |
|---|---|---|
| `d465d7faa0fd5855470649f9128a1515565be45f` | `2025-06-05T09:40:23+09:00` | feat: 분석로그 목록 조회 작업 |
| `734c8506c4a537392ac97a42728e9cced10971db` | `2025-06-05T10:29:04+09:00` | chore: 분석로그 목록 작업 완료 |
| `36ef199db70ffe2c020474767df5ea749ce24572` | `2025-06-05T10:55:49+09:00` | feat: 분석로그 엑셀 다운로드 기능 작업 |
| `9121784053e8aa5058a5f3e233bac0152b71b5e1` | `2025-06-05T17:03:39+09:00` | chore: swagger 검색조건 표기 수정 |
| `df7b3b776ac076dd3c177b8433c913868416ef15` | `2025-06-09T09:40:33+09:00` | chore: 분석로그 목록 회원타입 반환값 변경 작업 |
| `700ee8575a57b278b0131325c801739d35badc01` | `2025-06-12T10:29:13+09:00` | chore: 검색조건 요청자 구분 추가 |
| `3547ae1b3b8024343e52b3384b1e6dc937a69769` | `2025-06-12T16:10:12+09:00` | chore: 진료정보 분석 1차 인증 요청시 로그 적재 주석처리 부분 수정 |
| `bbbd3c61f5ed14a0f5b2ccd00e6d4c5c40c14b82` | `2025-06-17T16:05:28+09:00` | chore: 분석로그 관리 기업명 검색조건 수정 |
| `6eb0f14aa14462a698055ac1c01645938e1320a5` | `2025-06-17T16:05:28+09:00` | chore: 분석로그 관리 기업명 검색조건 수정 |
| `fed2fab2bce7082b54e5e5dda794ddcf30178df2` | `2025-07-21T12:36:45+09:00` | chore: 분석로그 적재 수정 |

### `feat/loss-adjusting` — 11건

| sha | 날짜 | 제목 |
|---|---|---|
| `9873856d5d3fe6a21280fe46dd3ad17b24be9149` | `2025-03-19T14:53:18+09:00` | chore: 관리자 손해사정 카테고리 상세 수정 작업 |
| `32b7c059c2fa71737c353d8b81bc25db8ccda8e5` | `2025-03-20T10:14:20+09:00` | chore: 카테고리 목록 조회시 page 0일 경우 전체 조회되도록 작업 |
| `5e6d6cf132beef2c672c3155f353cbd54cb54b62` | `2025-03-21T16:36:56+09:00` | chore: 손해사정 서비스 신규 등록 param 수정 |
| `6b98d6eab38b6380fda5a2a8af9242fa5a0681ed` | `2025-03-21T17:21:19+09:00` | feat: 손해사정 서비스 유저 수정 기능 작업 |
| `b1f18acab29534fa001659262c2a6f5e5a8bc1a7` | `2025-03-21T18:00:31+09:00` | feat: 손해사정 서비스 상세조회 유저 API 추가 |
| `32dd0748db5cf5a408023b05ced7b6c3f58c956d` | `2025-03-24T10:24:42+09:00` | chore: 손해사정 서비스 및 카테고리 수정 작업 |
| `ccf6d94f52d446317c474d1c4f1435f4f9129866` | `2025-03-24T11:03:12+09:00` | chore: 손해사정서비스 관리자 목록 조회 수정 작업 |
| `bf5eb80146e73696fcc3822ac0c4d552ae4d6bd1` | `2025-03-24T11:18:49+09:00` | chore: 손해사정 서비스 유저 목록 조회 API 리턴 타입 수정 |
| `c2db10758ae9c8e78929716192d5334d14df2f01` | `2025-03-28T15:49:26+09:00` | chore: 손해사정 서비스 상세 조회 데이터 답변 포함 |
| `ac9ce14a6bca1a30656397b2c41929a87e8fbefd` | `2025-03-31T12:19:57+09:00` | feat: 손해사정서비스 삭제 기능 추가 |
| `689a9bcd87e381a9c814f5866c164cc7f7c27ff2` | `2025-04-01T09:45:21+09:00` | chore: 손해사정서비스 유저 상세 조회시 검증 추가 |

### `feat/sales-agency-channel` — 20건

| sha | 날짜 | 제목 |
|---|---|---|
| `4aa4ed1f038b7dd5b69c21a6a362e87595861901` | `2025-06-25T16:28:09+09:00` | chore: 영업대리점 채널 삭제처리 로직 수정 |
| `2b16f358cb9d1134f92fea6428cbcd9556f93311` | `2025-06-26T09:09:19+09:00` | chore: 영업대리점 수정 권한 수정 및 기업, 일반회원 가입시 영업대리점 채널 코드 참조하도록 변경 |
| `26e335da2e7a4b4b155ba75171564f9906ad0115` | `2025-06-27T15:08:38+09:00` | chore: 영업대리점 구조 변경에 따른 API 검색조건 변경 작업 |
| `c7d939fcff6164e1e1e56c173202f8f52081992c` | `2025-06-30T10:15:52+09:00` | chore: 영업대리점 계정으로 로그인시 API response 데이터 해당 영업대리점것만 가져오도록 조치 |
| `5f60908ec8de8b104d4d6a06534a8459f0beef1b` | `2025-06-30T11:38:49+09:00` | chore: 영업대리점 채널 관련 관리자 API 목록/상세 값 추가 |
| `a5c7c0b7730b95cbddfbc4da6877b0fc1b108d2e` | `2025-06-30T12:07:29+09:00` | chore: 영업대리점 채널 all 리스트 조회시 영업대리점 id 조건에 추가 |
| `97b6b49eec97fea7a96438e9a9ec6c5dffb2a9e9` | `2025-06-30T14:54:21+09:00` | chore: nodemailer 기반 영업대리점 통계 발송 구조 변경에 따른 수정 진행 중 |
| `47cbd8d7725ebbf18f6a87ccd1ef2c3334d476c6` | `2025-06-30T17:40:15+09:00` | chore: 영업대리점 로그인시 메인 대시보드 조회 영업대리점 데이터만 볼수 있게 처리 |
| `67d54dafd295b6519395f9077bf9e5b2a06419db` | `2025-06-30T17:51:46+09:00` | chore: 기업목록도 영업대리점 로그인시 필터링되게 처리 |
| `63593fe8d83e38461eb69bf6ffb9bae7ba3336a0` | `2025-07-01T11:06:25+09:00` | chore: 관리자 고객 sacCode 영업대리점 채널 검색조건 작업 |
| `955dca01c0f4ea97883f3fb9477ff566c72d95bb` | `2025-07-01T11:34:39+09:00` | chore: 영업대리점 노드메일러 발송할 데이터 조회 수정 |
| `4e9b8425ecb665e98d72ab280322af48c3ac656b` | `2025-07-03T14:47:49+09:00` | chore: 영업대리점 로그인 계정일 경우 엑셀다운로드 프론트와 동일한 영역 마스킹 처리 |
| `397289df99da371de98a2f2267adedadc0946a40` | `2025-07-03T14:47:49+09:00` | chore: 영업대리점 로그인 계정일 경우 엑셀다운로드 프론트와 동일한 영역 마스킹 처리 |
| `e4b686af5c8d446670dfa426e4bf3d72412d1e74` | `2025-07-07T11:57:54+09:00` | chore: 영업대리점 기업의 경우 채널이 아닌 영업대리점과 매핑되도록 수정 작업 |
| `161db9bf2be657adc745c51ca845b1e5b5d60799` | `2025-07-07T14:29:24+09:00` | chore: 영업대리점 신규등록, 검색조건 수정작업 |
| `359be4cd4059b918ab32fbd9030349c708d68f46` | `2025-07-07T15:34:17+09:00` | chore: 영업대리점 로그인시 response 개인정보 마스킹 처리 작업 |
| `163d7a4fdfc28fcc778c63a8d0868f0a97fccf7b` | `2025-07-07T16:20:40+09:00` | chore: 영업대리점 로그인시 상세 마스킹 처리 및 기업FC 가입시 sagId 불필요하여 제거 |
| `8801e04146809547ebcc38b0a17c0a61661a47c2` | `2025-07-07T17:18:46+09:00` | chore: 엑셀다운로드 영업대리점 관련 항목 정리 작업 |
| `3f25b8374687c9ec29f672b1a8d5b06a50ffed94` | `2025-07-07T17:37:54+09:00` | chore: 분석로그관리 엑셀다운로드 항목 수정 |
| `a35f5b56fef69f5bc3ec640a59d74b3935607a63` | `2025-07-08T10:40:21+09:00` | chore: 기업계약관리 영업대리점 데이터 처리 및 검색조건 수정 |

### `feat/statistics-analysis` — 4건

| sha | 날짜 | 제목 |
|---|---|---|
| `2ef2e349df936cbcc72ee1efc62018427d36f11a` | `2025-04-07T10:15:40+09:00` | feat: 통계분석-월별 |
| `4465ee54d15e4250178eb3212abb5d83cafefd90` | `2025-04-07T11:36:58+09:00` | feat: 분석통계-일별 |
| `e70334967eafaeb8cbd80022175f098006fa01b9` | `2025-04-07T14:28:31+09:00` | feat: 구글챗용 통계 조회(미완) |
| `08f61a328199a9049692d8a6e8aadd21b274b300` | `2025-04-07T14:39:47+09:00` | refactor: 분석통계 쿼리수정 |

---

## 파일경로 축이 낸 결손 20 도메인

**제목 축 하나로는 모집단을 닫지 못한다.** `.claude/meta/01-meta-search-report.md` 84 행이
*"100% 커버리지를 갖는 축은 파일 경로뿐이다"* 로 그 성질을 이미 적었다. 파일경로 축을 대조 상대로
세우면 제목 축이 닿지 못한 자리가 이름으로 나온다.

| 축 | 값 |
|---|---|
| server 도메인 | 51 |
| 에픽 축이 닿는 도메인 | 31 |
| 결손 | 20 |

### 결손 도메인 전건

| 도메인 | 커밋 수 |
|---|---|
| `fax` | 53 |
| `disease` | 45 |
| `medication-standard` | 31 |
| `clinical-result` | 27 |
| `billing` | 25 |
| `point` | 20 |
| `b2c` | 18 |
| `push` | 15 |
| `common` | 13 |
| `fcm` | 10 |
| `codef` | 8 |
| `allow-ip` | 6 |
| `treat-test` | 6 |
| `_sample` | 5 |
| `admin-view-token` | 5 |
| `schedules` | 5 |
| `institution-block` | 4 |
| `medical` | 3 |
| `referral` | 3 |
| `loss-analysis` | 1 |

### 커밋-도메인 쌍

| 축 | 값 |
|---|---|
| 닿음 | A 1716 · B 497 |
| 결손 | A 201 · B 102 |

### site·admin 에는 이 대조가 성립하지 않는다

두 저장소에는 `modules/` 대응물이 없다. 상위 2단계 경로가 아래처럼 갈려 도메인 축 자체가 서지
않는다 — 재는 척하는 것이 안 재는 것보다 나쁘다.

| 저장소 | 상위 2단계 경로 distinct |
|---|---|
| insuniverse-site | 70 |
| insuniverse-admin | 35 |

**파일경로 축이 에픽을 유도하지는 못한다.** 에픽은 브랜치 단위 사건이고 도메인은 코드 단위라 두 축의
대상이 다르다. 이 축은 결손을 재는 **대조 집합**이지 두 번째 모집단이 아니다.

---

## 이 에픽 축이 덮는 구간

| 축 | 값 |
|---|---|
| 랜딩 | 114 |
| 에픽 소속 커밋 | 185 |
| 겹침 | 0 |
| 합집합 | 299 |
| 인덱스 이력 | 6190 |
| M4 릴리스 창 밖 | 5926 |
| 창 밖 대비 | 5.05% |
| 총 대비 | 4.83% |
| 에픽 축 창 | 2024-11-19 ~ 2026-07-02 (590일) |
| 인덱스 이력 폭 | 2024-08-27 ~ 2026-08-05 (708일) |

마일스톤 4 는 릴리스 창 밖 5926행을 *형제 문서 `## 연혁` 절과 마일스톤 5 가 나눠 진다* 로 적었다.
이 창이 받는 몫은 그중 299행이고 비율은 **5.05%** 다. 나머지의 인수처는 그대로 **형제 문서의
`## 연혁` 절**이다.

---

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

### 등급 C 단독 18개 에픽의 "왜"

이 18개 에픽은 최고 등급이 C 다. 등급표가 Era A 커밋 제목을 *시점 추정용. 단독 근거 금지* 로
판정해 뒀고, 보강할 등급 A·B 축이 이 에픽들에 닿지 않는다. 제목과 모듈 축은 §에픽 23건 과
§에픽 소속 커밋 185건 에 실려 있으나 **서사로 승격하지 않는다.**

### 배포 승격

소속 커밋 185/185 과 랜딩 114/114 이 locked prod tip 에서 도달 가능하다. 그것은 조상 관계의
관측이지 배포 승격의 판정이 아니다 — 3저장소 태그 0/0/0 · `refs/replace` 0/0/0 이라
저장소 안에 릴리스를 확증할 독립 증거가 없다. 판정 주체는 `00-protocol` 소관이고, 같은 판정이
[01-timeline.md](01-timeline.md) 에도 이월로 열려 있다.

### 살아있는 `feat/*` ref 의 귀속

살아있는 ref 8건과 랜딩 이름의 교집합이 0 이다.
**그 ref 들의 귀속을 이 문서는 판정하지 않는다** — 스쿼시 병합은 부모 사슬을 남기지 않아 토폴로지로
이을 수 없고, 태그가 0이라 대신 세울 축도 없다.

### 결손 20 도메인이 랜딩 없이 간 사유

그 도메인들의 작업이 명명된 `feat/*` 랜딩 없이 이루어졌다는 것은 관측이다.
**결손 도메인이 왜 랜딩 없이 갔는지 그 사유를 이 문서는 판정하지 않는다** — 이 문서의 축으로는
볼 수 없다.

---

## 랜딩 없이 이름만 남은 4건

제목에 이름은 나오는데 랜딩도 near-miss 도 아닌 이름들이다. 대개 `dev` 를 그 브랜치로 끌어온 병합의
목적지로만 등장한다.

| 이름 | 언급 sha |
|---|---|
| `feat/agency-user` | `fef3b55e5141ef468405ad94178887502d82c34a` |
| `feat/client-analyze-result` | `e9098de1035098dcee05a580788f7855630592e0` · `b423292fa13ef62ba1ef4c20d02ea341f66a8415` |
| `feat/fc-status-upload` | `7d1c89ed4686f4de68f4849b0d8e050f02283c65` · `819cf297cd684b020004b197087f10d589d04802` |
| `feat/samsung-s2-daily-report` | `8675a913a58f357067a0e9d6d9c5993d68205fb3` |

---

## 살아있는 `feat/*` ref 8건

`for-each-ref` 가 `refs/heads` · `refs/remotes/*` 아래에서 낸 `feat/<이름>` 전건이다. `feature/` 접두는
다른 이름공간이라 세지 않는다.

| 이름 | 저장소 |
|---|---|
| `feat/alimtalk-reminders-20260807` | admin·server·site |
| `feat/client-invoice` | server |
| `feat/corp-menu-permission` | admin |
| `feat/inhouse-simple-auth-stg-20260806` | server |
| `feat/loss-analysis-flow-20260805` | admin·server·site |
| `feat/nts-medical-stage-flow-20260804` | server·site |
| `feat/samsung-s2-daily-report` | server |
| `feat/simple-auth-stg-20260806` | site |

랜딩 이름과의 **교집합은 0** 이다. 이 8건 중 어느 것도 이 문서의 에픽 축에 나타나지 않는다.
