# Release Notes 이 문서는 [Keep a Changelog](https://keepachangelog.com/ko/1.0.0/) 형식을 따릅니다. ## [Unreleased] ### 추가 - **디자인 시스템 쇼케이스** (`/design-system.html`) — UI 단일 진실 공급원(SSOT) - 별도 Vite entry, 메인 SPA와 분리 (designSystem-*.js 54KB) - 10개 섹션: Intro / Token / Typography / Badge / Button / Form / Card / Layout / Catalog / Guide - 추적 ID 체계 `TRK-<카테고리>-<슬러그>` (예: `TRK-BADGE-critical-sm`) - 호버 시 툴팁, "ID 복사 모드", URL 해시 딥링크 `#trk=...` - 단축키 `A`로 다크/라이트 토글 - 한글/영문 라벨 병기로 카탈로그 검토 용이 - **신규 공통 컴포넌트**: - `Button` (5 variant × 3 size = 15) `@shared/components/ui/button` - `Input` / `Select` / `Textarea` / `Checkbox` / `Radio` `@shared/components/ui/` - `TabBar` / `TabButton` (underline / pill / segmented 3 variant) `@shared/components/ui/tabs` - `PageContainer` (size sm/md/lg + fullBleed) `@shared/components/layout/PageContainer` - `PageHeader` (icon + title + description + demo + actions) `@shared/components/layout/PageHeader` - `Section` (Card 단축) `@shared/components/layout/Section` - **중앙 레지스트리**: - `catalogRegistry.ts` — 23개 카탈로그 메타 (id/title/description/source/items 자동 enumerate) - `variantMeta.ts` — Badge intent 8종 + Button variant 5종 의미 가이드 - `statusIntent.ts` — 한글/영문 ad-hoc 상태 → BadgeIntent + getRiskIntent(0~100) - **4 catalog에 intent 필드 추가**: eventStatuses / enforcementResults / enforcementActions / patrolStatuses + getXxxIntent() 헬퍼 - **UI 공통 카탈로그 19종** (`frontend/src/shared/constants/`) — 백엔드 enum/code_master 기반 SSOT - violation/alert/event/enforcement/patrol/engine/userRole/device/parentResolution/ modelDeployment/gearGroup/darkVessel/httpStatus/userAccount/loginResult/permission/ vesselAnalysis/connection/trainingZone + kpiUiMap - 표준 API: `get{Cat}Intent(code)`, `get{Cat}Label(code, t, lang)`, `get{Cat}Classes/Hex` - **시맨틱 텍스트 토큰** (`theme.css @layer utilities`) — Tailwind v4 복합 이름 매핑 실패 대응 - `text-heading/label/hint/on-vivid/on-bright`, `bg-surface-raised/overlay` 직접 정의 - **Badge 시스템 재구축** — CVA 기반 8 intent × 4 size (rem), !important 제거 - **cn() 유틸** (`lib/utils/cn.ts`) — clsx + tailwind-merge, 시맨틱 토큰 classGroup 등록 - **ColorPicker 컴포넌트** — 팔레트 grid + native color + hex 입력 - **Role.colorHex** (백엔드 V017 migration) — auth_role.color_hex VARCHAR(7), 빌트인 5개 역할 기본 색상 시드 - System Flow 뷰어 (`/system-flow.html`) — 시스템 전체 데이터 흐름 시각화 - 102 노드 + 133 엣지, 10개 카테고리 매니페스트 - stage/menu 두 가지 그룹화 토글, 검색/필터/딥링크 지원 - 포커스 모드 (1-hop 연결 노드만 활성화, 나머지 dim) - 메인 SPA와 분리된 별도 entry, 산출문서 노드 ID 참조용 - `/version` 스킬 사후 처리로 manifest version 자동 동기화 - CI/CD에서 버전별 스냅샷을 서버 archive에 영구 보존 - 백엔드 `GET /api/stats/hourly?hours=24` — 시간별 통계 조회 (PredictionStatsHourly) - V014 prediction 보조 테이블 12개 (fleet_vessels, gear_correlation_scores 등) - V015 NUMERIC precision 일괄 확대 (score→7,4, pct→12,2) - V016 parent workflow 누락 컬럼 일괄 추가 (17+ 컬럼, candidate_mmsi generated column) ### 변경 - **35+ feature 페이지 PageContainer/PageHeader 마이그레이션** — admin/detection/enforcement/field-ops/patrol/statistics/ai-operations/parent-inference/dashboard/monitoring/surveillance/vessel/risk-assessment 전체 - **VesselDetail `-m-4` negative margin 해킹 → ``** 정리 - **LiveMapView fullBleed 패턴** 적용 - **Badge intent 팔레트 테마 분리**: 라이트(파스텔 `bg-X-100 text-X-900`) + 다크(translucent `bg-X-500/20 text-X-400`) - **40+ 페이지 Badge/시맨틱 토큰 마이그레이션** - Badge className 직접 작성 → intent/size prop 변환 - 컬러풀 액션 버튼 → `text-on-vivid` (흰색), 검색/필터 버튼 → `bg-blue-400 text-on-bright` - ROLE_COLORS 4곳 중복 제거 → `getRoleBadgeStyle()` 공통 호출 - PermissionsPanel 역할 생성/수정에 ColorPicker 통합 - DataTable `width` 의미 변경: 고정 → 선호 최소 너비 (minWidth), 컨텐츠 자동 확장 + truncate - `dateFormat.ts` sv-SE 로케일로 `YYYY-MM-DD HH:mm:ss` 일관된 KST 출력 - MonitoringDashboard `PagePagination` 제거 (데이터 페이지네이션 오해 해소) ### 수정 - **접근성 (WCAG 2.1 Level A)** — axe DevTools 위반 전수 처리: - `` 5곳 aria-label - 아이콘 전용 `