1def64dd1d
Merge pull request 'docs: 릴리즈 노트 정리 (2026-04-16.6)' ( #63 ) from release/2026-04-16.6 into develop
2026-04-16 14:39:52 +09:00
49c11e7b4a
docs: 릴리즈 노트 정리 (2026-04-16.6)
2026-04-16 14:38:59 +09:00
9607f798dd
Merge pull request 'feat: 중국어선 감시 실데이터 연동 + 특이운항 미니맵/판별 패널' ( #62 ) from feature/china-fishing-backend-api into develop
2026-04-16 14:36:31 +09:00
a9f81c6c7e
docs: 릴리즈 노트 업데이트
2026-04-16 14:35:43 +09:00
d82eaf7e79
feat(frontend): 중국어선 감시 실데이터 연동 + 특이운항 미니맵/판별 패널
...
Tab 1 AI 감시 대시보드 / Tab 2 환적탐지 / Tab 3 어구판별 3개 탭을
deprecated iran proxy 에서 자체 /api/analysis/* 로 전환하고, 특이운항
선박의 24h 항적과 판별 구간 상세를 지도와 패널로 제공한다.
서비스 계층
- analysisApi.ts 확장: getAnalysisStats / getAnalysisVessels(필터 3종) /
getGearDetections 추가. VesselAnalysis 에 violationCategories /
bd09OffsetM / ucafScore / ucftScore / clusterId 필드 노출
- analysisAdapter.ts: flat VesselAnalysis → nested VesselAnalysisItem
변환으로 기존 컴포넌트 재사용
- vesselAnalysisApi.ts fetchVesselAnalysis @deprecated 마킹
Tab 1 (ChinaFishing)
- 서버 집계(stats) 기준 카운터 재구성. 중국어선 / Dark / 환적 / 고위험
모두 mmsiPrefix=412 로 서버 필터
- 선박 리스트 vessel_type UNKNOWN 인 경우 "중국어선" + "미분류" 로 표시
- 특이운항 row 클릭 → 아래 행에 미니맵 + 판별 패널 배치
- 관심영역 / VIIRS / 기상 / VTS 카드에 "데모 데이터" 뱃지. 비허가 /
제재 / 관심 탭 disabled + "준비중" 뱃지
Tab 2 (RealVesselAnalysis)
- /analysis/dark / /analysis/transship / /analysis/vessels mode별 분기
- 상단 통계 카드를 items 클라이언트 집계로 전환해 하단 테이블과 정합
Tab 3 (GearIdentification)
- 최하단 "최근 자동탐지 결과" 섹션 추가. row 클릭 시 상단 입력 폼
프리필 + 결과 패널에 자동탐지 근거 프리셋
특이운항 판별 시각화 (VesselMiniMap / VesselAnomalyPanel /
vesselAnomaly 유틸)
- 24h getAnalysisHistory 로드 → classifyAnomaly 로 DARK/SPOOFING/
TRANSSHIP/GEAR_VIOLATION/HIGH_RISK 5개 카테고리 판별. 좌표는
top-level lat/lon 우선, features.gap_start_* fallback
- groupAnomaliesToSegments: 5분 주기 반복되는 동일 신호를 시작~종료
구간으로 병합
- 미니맵: 전체 궤적은 연한 파랑, segment 시간범위와 매칭되는 AIS
궤적 서브구간을 severity 색(CRITICAL 빨강 / WARNING 주황 / INFO
파랑) 으로 하이라이트. 이벤트 기준 좌표는 작은 흰 점
- 판별 패널: 시작→종료 · 지속 · N회 연속 감지 · 카테고리 뱃지 · 설명
2026-04-16 14:31:26 +09:00
820ed75585
feat(backend): /api/analysis stats + gear-detections 엔드포인트 추가
...
중국어선 감시 화면의 실데이터 연동을 위해 기존 /api/analysis 에 집계/
필터 기능을 보강한다.
- VesselAnalysisResult 엔티티에 violation_categories TEXT[] 매핑 추가
- VesselAnalysisResponse 에 violationCategories / bd09OffsetM /
ucafScore / ucftScore / clusterId 5개 필드 노출
- /api/analysis/vessels 에 mmsiPrefix / minRiskScore / minFishingPct
필터 파라미터 추가
- /api/analysis/stats: MMSI별 최신 row 기준 단일 쿼리 COUNT FILTER
집계 (total/dark/spoofing/transship/risk별/zone별/fishing/avgRisk)
- /api/analysis/gear-detections: gear_code/judgment NOT NULL 인 row
MMSI 중복 제거 목록. 어구/어망 판별 탭 '자동탐지 결과' 섹션 연동용
- deprecated 스텁 /api/vessel-analysis 는 프론트 호출 제거 후 다음
릴리즈에서 삭제 예정 (이번 PR 에서는 유지)
2026-04-16 14:31:02 +09:00
14eb4c7ea3
feat(prediction): vessel_analysis_results 에 분석 시점 lat/lon 저장
...
AnalysisResult 에 lat/lon 필드 + to_db_tuple 반영 + upsert_results SQL
컬럼 추가. 분류 파이프라인(last_row) / 경량 분석(all_positions) 두 경로
모두 분석 시점의 선박 위치를 함께 기록해 프론트 미니맵에서 특이운항
판별 위치를 실제 항적 위에 표시할 수 있게 한다.
배포 후 첫 사이클 8173/8173 lat/lon non-null 확인.
2026-04-16 14:30:49 +09:00
da4557a5df
Merge pull request 'docs: 릴리즈 노트 정리 (2026-04-16.5)' ( #60 ) from release/2026-04-16.5 into develop
2026-04-16 11:37:20 +09:00
3248ec581b
docs: 릴리즈 노트 정리 (2026-04-16)
2026-04-16 11:37:15 +09:00
369aaec06f
Merge pull request 'refactor(frontend): admin Phase 1-B 디자인 시스템 하드코딩 색상 제거' ( #59 ) from feature/admin-ds-phase1b into develop
2026-04-16 11:36:45 +09:00
f1dc9f7a5a
docs: 릴리즈 노트 업데이트
2026-04-16 11:36:22 +09:00
234169d540
refactor(frontend): admin 11개 페이지 디자인 시스템 하드코딩 색상 제거 (Phase 1-B)
...
129건 하드코딩 Tailwind 색상 → 시맨틱 토큰 치환:
- text-cyan-400 (45건) → text-label
- text-green-400/500 (51건) → text-label + Badge intent="success"
- text-red-400/500 (31건) → text-heading + Badge intent="critical"
- text-blue-400 (33건) → text-label + Badge intent="info"
- text-purple-400 (20건) → text-heading
- text-yellow/orange/amber (32건) → text-heading + Badge intent="warning"
raw <button> → <Button> 컴포넌트 교체 (DataHub/NoticeManagement/SystemConfig 등)
미사용 import 정리 (SaveButton/DataTable/lucide 아이콘)
대상: AIAgentSecurityPage, AISecurityPage, AccessControl, AccessLogs,
AdminPanel, AuditLogs, DataHub, LoginHistoryView, NoticeManagement,
PermissionsPanel, SystemConfig
검증: tsc 0 errors, eslint 0 errors, 하드코딩 색상 잔여 0건
2026-04-16 11:25:51 +09:00
6f997ad796
Merge pull request 'docs: 릴리즈 노트 정리 (2026-04-16.4)' ( #57 ) from release/2026-04-16.4 into develop
2026-04-16 11:09:42 +09:00
15e17759f8
docs: 릴리즈 노트 정리 (2026-04-16)
2026-04-16 11:09:17 +09:00
25de59be12
Merge pull request 'feat(prediction): DAR-03 탐지 튜닝 v2 (pair/매칭/G-02/G-03)' ( #56 ) from feature/dar03-tuning-v2 into develop
2026-04-16 11:07:47 +09:00
20e2b029c5
docs: 릴리즈 노트 업데이트
2026-04-16 11:07:06 +09:00
7314c7f65f
fix(prediction): match_ais_to_registry 대상을 전체 중국 선박으로 확장 (A-2 핵심 버그)
...
버그: all_ais 를 vessel_dfs(classification 통과 500척)만 대상으로 구성 →
허가선 906척 중 실제 AIS 존재 866척(upper bound 95.8%) 임에도 매칭률
9.4% 에 머물렀던 진짜 원인.
수정: vessel_store._tracks 전체에서 중국 MID(412/413/414) 활성 선박을
대상으로 match_ais_to_registry 호출. 매칭률 upper bound 95.8% 까지 회복 기대.
검증: 이번 AIS 실제 샘플 조사로 판명:
- AIS 고유 정규화 이름 411,908 개
- 허가선 정규화 이름 904 개
- 교집합 866 개 (95.8%)
→ 정규화 로직은 정상 작동. 문제는 호출 범위였음.
2026-04-16 10:32:54 +09:00
535704707b
fix(prediction): FUZZY 정규화를 공백/대소문자만으로 축소 + name_en 전용 (A-2 후속)
...
버그 원인: 초기 정규화가 선박번호(suffix)까지 제거 → '浙岭渔20865' → '浙岭渔' 로
축약 → 동명이 수십 개 발생 → len(unassigned)>1 조건에 전부 탈락 → FUZZY=0건.
중국/한국 어선명은 업체명+선박번호가 고유 식별자이므로 숫자 자체는 보존해야 함.
정규화는 공백/구두점/대소문자/'NO.' 마커만 통일:
'ZHE LING YU 20865' ↔ 'zhelingyu20865' ↔ 'ZHE-LING-YU-20865' 모두 일치
FUZZY 매칭 key 는 name_en 만 등록 (AIS 보고 이름이 영문이 주류).
2026-04-16 10:13:35 +09:00
37ae1bfa48
feat(prediction): 서버 스크립트에 tier/match_method/G-02/G-03 추적 추가
...
scheduler.py features write 확장:
- pair_tier (STRONG/PROBABLE/SUSPECT)
- pair_type, pair_reject_reason
- similarity, confidence
- registered_fishery_code
→ SUSPECT tier 까지 raw_pair 로 보존하여 통계 집계 가능
diagnostic-snapshot.sh (5분 주기):
- 4-4.1 pair_trawl tier 분포 + avg_sync_min
- 4-4.2 reject 사유 journal 로그 tail
- 4-4.3 G-02 금어기 상세 (observed_at, fishery_code)
- 4-4.4 G-03 미등록 어구 상세 (detected/registered/allowed)
- 7.5-2b match_method 분포 (EXACT vs FUZZY)
- 7.5-2c fishery_code × match_method 교차
hourly-analysis-snapshot.sh (1시간 주기):
- P3.5 match_method 분포 + avg_confidence
- P3.6 fishery_code × match_method 교차
- D3.6 pair_tier 분포 + avg_sync_min + avg_sep_nm
- D3.7 G-02/G-03 건수 + gear_judgment 분포
- D3.8 reject 사유 1시간 journal 집계
2026-04-16 09:50:42 +09:00
68e690d791
refactor(prediction): pair_trawl tier 분류 + join_key time_bucket 전환
...
두 가지 근본 버그를 동시에 해결:
1. Join key 버그 — raw AIS timestamp(ms 단위) inner join 은 두 선박 간 우연히
일치하는 확률이 거의 0. vessel_store._tracks 의 time_bucket(5분 리샘플)
컬럼을 우선 사용. _pair_join_key() 헬퍼로 fallback 지원.
2. AND 게이트 0건 문제 — 스펙 100%(2h 연속 + 500m + SOG 2-4 + sog_delta 0.5 +
cog 10°)를 전부 요구하면 실제 공조 페어를 놓침. Tier 분류로 재설계:
- STRONG : 스펙 100% (24 cycles, 기존 조건)
- PROBABLE: 800m / SOG 1.5-5 / sog_delta 1.0 / cog 20° / 12 cycles + 0.6 ratio
- SUSPECT : 동일 완화 조건 / 6 cycles + 0.3 ratio (플래그만)
G-06 판정은 STRONG/PROBABLE 만. SUSPECT 는 약한 신호로 노출.
거부 사유 카운터(REJECT_COUNTERS) + tier 카운트를 사이클별 로그 출력.
'조건이 엄격한건지 실제 페어가 없는건지' 원인 구분 가능.
피드백 메모리: feedback_detection_tier.md
2026-04-16 09:47:08 +09:00
f5374a5316
refactor(prediction): pair_trawl sog/cog on-demand 계산 + 중국 MID 413/414 추가
...
- pair_trawl._ensure_sog_cog(): _trajectory_similarity 진입 시 sog/cog 없으면
vessel_store._compute_sog_cog() 로 haversine 계산 (tracks + timestamp 만 있으면 OK)
- pool 을 vessel_store._tracks 전체(55k)로 원복: 한국 440xxx/러시아 273xxx 페어 탐색 가능
- base 필터 중국 MID 확장: 412 → 412/413/414 (본토/홍콩/마카오)
- df_targets groupby 우회 제거 (불필요한 결합)
2026-04-16 09:29:38 +09:00
6c08d831d0
fix(prediction): pair_trawl pool 에 sog/cog 계산된 궤적 사용 (A-1 후속)
...
버그: vessel_store._tracks 는 raw_sog 만 보유 → _trajectory_similarity 가
sog/cog 컬럼 부재로 항상 0 반환 → candidates=0.
df_targets(select_analysis_targets 결과, 412* 전체 8k+ 에 sog/cog 계산)
를 mmsi 별로 groupby 하여 pool_tracks dict 생성. base 확장 필터의
sog 컬럼도 동일하게 적용.
첫 사이클 로그: base=512, pool=54825 → candidates=0 (2026-04-16 09:25).
수정 후 재검증 예정.
2026-04-16 09:27:42 +09:00
1a065840bd
feat(prediction): G-02 금어기 + G-03 미등록 어구 탐지 추가 (A-4)
...
V029 fishery_permit_cn 스키마를 입력으로 하여 보류 중이던 G-02/G-03
판정 함수를 신설. classify_gear_violations() 시그니처에 permit_periods,
registered_fishery_code, observation_ts 매개변수 추가.
- G-02 (CLOSED_SEASON_FISHING, score 18): 관측 시각이 fishing_period_1/2
허가 기간 밖이면 금어기 조업
- G-03 (UNREGISTERED_GEAR, score 12): 감지 어구가 fishery_code 허용 어구
집합(PT→TRAWL/PT-S, GN→GILLNET, PS→PURSE, OT→TRAWL, FC→금지)에 없음
- fleet_tracker: _parse_period_range() 'YYYY/MM/DD - YYYY/MM/DD' 파서 +
get_permit_periods() + get_registered_fishery_code()
- violation_classifier: CLOSED_SEASON_FISHING / UNREGISTERED_GEAR judgment →
ILLEGAL_GEAR 카테고리 매핑
데이터 부재(permit_periods 빈 값, fishery_code 미등록) 시 판정 보류 → False.
검증 목표: 1시간 내 G-02/G-03 각 ≥ 1건
2026-04-16 09:12:07 +09:00
64df7b180c
feat(prediction): fleet_tracker NAME_FUZZY 매칭 추가 (A-2)
...
_normalize_vessel_name()로 선박번호 suffix(호/號/号/NoN/#N) +
공백/구두점 제거 후 upper() 통일. EXACT 실패 시 FUZZY 단계로
매칭 시도. 동명이 후보 2개 이상이거나 이미 다른 MMSI 할당된 vid는
제외하여 중복 방지.
- match_ais_to_registry: NAME_EXACT → NAME_FUZZY (confidence 0.80)
- track_gear_identity: parent_name 매칭에도 FUZZY 적용
- _name_fuzzy_map 캐시로 1회 lookup
검증 목표: fleet_vessels.mmsi 매칭률 8.7% → 30%+
2026-04-16 09:08:35 +09:00
d817e4cbbf
perf(prediction): pair_trawl base 확장 + 임계 완화 (A-1)
...
- SIMILARITY_OBSERVE 0.50 → 0.45 (pool 확대 후 recall 확보)
- min_common_samples 6 → 4 (비분류 선박 샘플 부족 보정)
- base_mmsis에 조업 속력대(1.5~5.0kn) 중국 412* 전체 추가
(classifications 500척만으로 bbox 기점 부족 → 실제 공조 페어 누락)
검증 목표: 10분 사이클에서 pair_detected ≥ 1
2026-04-16 09:06:50 +09:00
ac67b9b7af
Merge pull request 'docs: 릴리즈 노트 정리 (2026-04-16.3)' ( #54 ) from release/2026-04-16.3 into develop
2026-04-16 08:44:29 +09:00
9c74459acc
docs: 릴리즈 노트 정리 (2026-04-16.3)
2026-04-16 08:44:17 +09:00
03d3d428e5
Merge pull request 'refactor(admin): 3개 신규 페이지 디자인 시스템 준수 + RBAC skeleton (Phase 1-A)' ( #53 ) from feature/admin-ds-rbac-refactor into develop
2026-04-16 08:43:52 +09:00
e6b053dfa2
Merge remote-tracking branch 'origin/develop' into feature/admin-ds-rbac-refactor
...
# Conflicts:
# docs/RELEASE-NOTES.md
2026-04-16 08:43:33 +09:00
a68945bd07
docs: 릴리즈 노트 업데이트
2026-04-16 08:40:07 +09:00
69b97d33f6
refactor(admin): 3개 신규 페이지 디자인 시스템 준수 + RBAC skeleton (Phase 1-A)
...
- performanceStatus.ts 카탈로그 신설 (status→intent/hex/label)
- 자체 탭 네비 3건 → TabBar/TabButton (underline variant)
- raw <button> 3건 → TabButton
- PerformanceMonitoring hex 9건 → getPerformanceStatusHex 카탈로그
- statusIntent/barColor 로컬 함수 → 카탈로그 getPerformanceStatusIntent + utilizationStatus
- 3개 페이지 useAuth().hasPermission() skeleton 배치 (Phase 3 action guard 대비)
- 남은 hex 10건(DAR-10/11 KPI)은 Phase 1-B 전역 admin 시맨틱 색상 통일에서 처리
검증: tsc + ESLint + vite build 모두 통과
2026-04-16 08:39:34 +09:00
bf473c12bf
Merge pull request 'docs: 릴리즈 노트 정리 (2026-04-16.2)' ( #49 ) from release/2026-04-16.2 into develop
2026-04-16 08:03:44 +09:00
77b6fc9b14
docs: 릴리즈 노트 정리 (2026-04-16.2)
2026-04-16 08:03:32 +09:00
0f29172a5d
Merge pull request 'feat: 시스템관리 > 감사·보안에 성능 모니터링(PER-01~06) 메뉴 추가' ( #48 ) from merge/performance-monitoring-into-develop into develop
2026-04-16 08:01:53 +09:00
d12c81f233
Merge remote-tracking branch 'origin/feature/performance-monitoring-menu' into merge-check/performance-monitoring-menu-into-develop
2026-04-16 07:59:56 +09:00
0a5d8fe213
Merge pull request 'docs: 릴리즈 노트 정리 (2026-04-16)' ( #46 ) from release/2026-04-16 into develop
2026-04-16 07:48:41 +09:00
dd0a934203
docs: 릴리즈 노트 정리 (2026-04-16)
2026-04-16 07:48:23 +09:00
47c553d993
Merge pull request 'feat(prediction): DAR-03 탐지 로직 보강 + 한중어업협정 906척 레지스트리 적재' ( #45 ) from feature/dar03-detection-hardening into develop
2026-04-16 07:46:30 +09:00
9d538cffd8
docs: 릴리즈 노트 업데이트
2026-04-16 07:45:14 +09:00
8ff04a8cca
feat(prediction): DAR-03 탐지 로직 보강 + 한중어업협정 906척 레지스트리 적재
...
- V029: kcg.fishery_permit_cn 신규 테이블(연단위, permit_year+permit_no 복합 유니크) + fleet_vessels permit_year/fishery_code 컬럼
- load_fishery_permit_cn.py: xls → DB 적재 스크립트, 906척 + 497 신청인사 upsert
- G-04/G-05/G-06 Dead code 해결: classify_gear_violations 호출 연결, dir() 버그 제거
- find_pair_candidates: bbox 1차 + 궤적 유사도(location/sog_corr/cog_alignment) 2차, role 가점
- spoofing 산식 교체: 1시간 윈도우 + teleport 절대 가점 + extreme 50kn 단독 0.6 확정
- transshipment 선종 완화: shipTy 부분일치 + 412* FISHING 간주
- gear_code DB write 경로 신설 + fleet_tracker API 3개 추가
- cron 스크립트: fishery_permit/pair_type/fleet_role 신규 섹션
2026-04-16 07:43:24 +09:00
Nan Kyung Lee
755f3919ba
feat: 시스템관리 > 감사·보안에 성능 모니터링(PER-01~06) 메뉴 추가
...
- V028 Flyway 마이그레이션: admin:performance-monitoring 권한 트리 + RBAC
- PerformanceMonitoring.tsx: 5 탭 구조(성능 현황·응답성·처리용량·AI 모델·가용성/확장성)
- PER-01~06 전체 커버: 3,000명 규모·상황실 100명 24/7 SLO·S&P 글로벌 AIS 영향 최소화 8대 전략
- 6개 AI 모델 성능 지표(정확도·정밀도·재현율·F1·ROC-AUC) 표시
- 디자인 시스템 준수: PageContainer/PageHeader/Card/Badge intent 기반
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 17:12:53 +09:00
35cc889d23
Merge pull request 'release: 2026-04-15 (5건 커밋)' ( #43 ) from develop into main
Build and Deploy KCG AI Monitoring (Frontend) / build-and-deploy (push) Successful in 18s
2026-04-15 13:43:29 +09:00
68940e73b0
Merge pull request 'docs: 릴리즈 노트 정리 (2026-04-15)' ( #42 ) from release/2026-04-15 into develop
2026-04-15 13:42:34 +09:00
1cc4c9dfd7
docs: 릴리즈 노트 정리 (2026-04-15)
2026-04-15 13:42:06 +09:00
ba6908a0d4
Merge pull request 'feat(detection): DAR-03 어구 탐지 워크플로우 + 모선 검토 UI + 24h 리플레이 통합' ( #41 ) from feature/dar03-fishing-pattern-enhancement into develop
2026-04-15 13:30:01 +09:00
52ac478069
docs: 릴리즈 노트 [Unreleased] DAR-03 + 모선 검토 + 리플레이 항목 추가
2026-04-15 13:29:01 +09:00
2ee8a0e7ff
feat(detection): DAR-03 어구 탐지 워크플로우 + 모선 검토 UI + 24h 리플레이 통합
...
- prediction: G-01/G-04/G-05/G-06 위반 분류 + 쌍끌이 공조 탐지 추가
- backend: 모선 확정/제외 API + signal-batch 항적 프록시 + ParentResolution 점수 근거 필드 확장
- frontend: 어구 탐지 그리드 다중필터/지도 flyTo, 후보 검토 패널(점수 근거+확정/제외), 24h convex hull 리플레이 + TripsLayer 애니메이션
- gitignore: 루트 .venv/ 추가
2026-04-15 13:26:15 +09:00
908b2cdafa
Merge pull request 'release: 단속 계획 순찰 작전 + 감사·보안 DAR-10/DAR-11' ( #40 ) from release/2026-04-14-enforcement-dar into main
Build and Deploy KCG AI Monitoring (Frontend) / build-and-deploy (push) Successful in 15s
2026-04-14 16:55:56 +09:00
Nan Kyung Lee
256152f7fc
feat: 시스템관리 > 감사·보안에 데이터 모델 검증(DAR-11) 메뉴 추가
...
- 5탭 구성: 검증 현황 / 논리 모델 검증 / 물리 모델 검증 / 중복·정합성 점검 / 검증 결과 이력
- 4단계 검증 절차 (계획 수립→논리 검증→물리 검증→결과 보고)
- 논리 모델 8항목 (완전성·정합성·정규화·표준), 물리 모델 10항목 (구조·타입·인덱스·제약·성능)
- 중복·정합성 점검 6항목 + 8개 주제영역 48테이블 매핑
- V027 마이그레이션: admin:data-model-verification 권한 트리 + ADMIN 역할 권한
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 16:55:05 +09:00
Nan Kyung Lee
77f39497e5
feat: 시스템관리 > 감사·보안에 데이터 보관·파기 정책(DAR-10) 메뉴 추가
...
- 5탭 구성: 보관 현황 / 유형별 보관기간 / 파기 절차 / 예외·연장 / 파기 감사 대장
- 6종 데이터 유형별 보관기간 기준표 (법적 근거 포함)
- 4단계 파기 승인 절차 워크플로우 (선별→신청→승인→기록)
- 보존 연장 예외 관리 (수사·소송·감사·재난 4가지 사유)
- 파기 감사 대장 (대상·일시·담당자·방식·용량 기록)
- V026 마이그레이션: admin:data-retention 권한 트리 + ADMIN 역할 권한
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 16:55:05 +09:00