커밋 그래프

432 커밋

작성자 SHA1 메시지 날짜
6303831df3 Merge pull request 'fix: parent_resolution JOIN 타이밍 갭 허용' (#226) from hotfix/join-timing-tolerance into main
All checks were successful
Deploy KCG / deploy (push) Successful in 1m29s
2026-04-06 07:09:17 +09:00
dd9de6739c fix: parent_resolution JOIN 타이밍 갭 허용 — snapshot_time - 10분
5분 사이클에서 폴리곤 저장 → inference 실행 순서로 인해
latest snapshot_time > last_evaluated_at이 될 수 있음.
JOIN 조건에 10분 여유를 두어 이전 사이클 결과도 매칭되도록 수정.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 07:08:54 +09:00
ed618f6dd0 Merge pull request 'fix: hotfix 동기화 — history/detail candidate_count 안전 처리' (#225) from hotfix/sync-candidate-count into develop 2026-04-04 11:05:43 +09:00
d37653c1be Merge pull request 'fix: history/detail API 500 오류 — candidate_count 컬럼 부재 시 안전 처리' (#224) from hotfix/history-candidate-count into main
All checks were successful
Deploy KCG / deploy (push) Successful in 1m53s
2026-04-04 11:05:14 +09:00
17922bf74c fix: history/detail API 500 오류 — candidate_count 컬럼 부재 시 안전 처리
mapGroupRow에서 candidate_count를 읽을 때 optionalInt로 변경하여
해당 컬럼이 없는 SQL (history, detail)에서도 정상 동작하도록 수정

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 11:04:41 +09:00
32f9aa897b Merge pull request 'release: 2026-04-04 (31건 커밋)' (#223) from develop into main
All checks were successful
Deploy KCG / deploy (push) Successful in 1m28s
2026-04-04 10:53:04 +09:00
de11a162b4 Merge pull request 'docs: 릴리즈 노트 정리 (2026-04-04)' (#222) from release/2026-04-04 into develop 2026-04-04 10:49:43 +09:00
b14b6c241e docs: 릴리즈 노트 정리 (2026-04-04)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 10:49:10 +09:00
7ea5b4719a Merge pull request 'fix: vessel_store 타임존 수정 + 모선 추론 이식 + 검토 목록 동기화' (#221) from bugfix/vessel-store-tz-naive into develop 2026-04-04 10:28:41 +09:00
d57f993960 docs: 릴리즈 노트 업데이트 — 모선 검토 동기화 수정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 10:27:32 +09:00
0b74831b87 fix: 모선 검토 대기 목록을 폴리곤 폴링 데이터에서 파생하여 동기화 문제 해소
- Backend: LATEST_GROUPS_SQL에 candidateCount CTE 추가 (GroupPolygonDto 확장)
- Frontend: parentInferenceQueue를 별도 API 대신 groupPolygons useMemo 파생으로 전환
- 렌더 루프 수정: refreshParentInferenceQueue deps에서 groupPolygons → polygonRefresh 분리
- 초기 로드 시 자동 그룹 선택 제거, 검토 패널만 표시
- 후보 소스 배지 축약 (CORRELATION→CORR, PREVIOUS_SELECTION→PREV)
- useGroupPolygons에 refresh 콜백 외부 노출

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 10:21:28 +09:00
83db0f8149 docs: 릴리즈 노트 + 프로젝트 문서 최신화 (세션 마무리)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 09:21:16 +09:00
e7ed536be5 fix: prediction proxy target을 nginx 경유로 변경
로컬 dev에서 192.168.1.18(redis-211 내부 IP) 직접 접근 불가 → timeout.
kcg.gc-si.dev nginx 경유로 변경하여 정상 동작.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 09:19:37 +09:00
1033654c82 fix: 모선 추론 점수 가중치 조정 — 100%는 DIRECT_PARENT_MATCH 전용
문제: china_bonus(15%) + prior(20%) 가산으로 일반 후보 23.6%가 100% 도달
- china_bonus: 0.15 → 0.05, 적용 조건: pre >= 0.30 → 0.50
- episode_prior: 0.10 → 0.05
- lineage_prior: 0.05 → 0.03
- label_prior: 0.10 → 0.07
- total_prior_cap: 0.20 → 0.10

결과: 일반 후보 최대 ~93% (라벨 있으면 ~98%), 100%는 직접 모선 일치만

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 09:09:36 +09:00
15f5f680fd fix: FleetClusterLayer codex 원본 복원 + ESLint suppress
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:31:04 +09:00
2ca6371d87 feat: LoginPage DEV_LOGIN 환경변수 지원 추가
VITE_ENABLE_DEV_LOGIN=true로 프로덕션 빌드에서도 DEV LOGIN 활성화 가능.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:21:03 +09:00
e11caf2767 feat: 어구 모선 추적 흐름도 시각화 (React Flow) 추가
- GearParentFlowViewer: React Flow 기반 인터랙티브 흐름도
- gear-parent-flow.html: standalone entry point
- vite.config.ts: multi-entry 빌드 (main + gearParentFlow)
- App.tsx: FLOW 링크 추가
- @xyflow/react 의존성 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:19:21 +09:00
23828c742e refactor: codex 이식 완료 — 환경변수 동적화 + @Table schema 제거 + import 정리
- Backend: @Table(schema="kcg") 하드코딩 제거 → application.yml default_schema 활용
- Backend: application.yml/prod.yml 환경변수 ${} 패턴 전환
- Backend: WebConfig CORS 5174 포트 추가
- Frontend: tsconfig resolveJsonModule 추가
- Prediction: scheduler/snpdb/vessel_store import 위치 + 주석 codex 동기화

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:17:57 +09:00
5432e1f282 fix: codex 이식 누락 파일 보완 — polygon_builder 필터 + qualified_table 정리
- polygon_builder: is_trackable_parent_name 필터 추가 (짧은 이름 어구 제외)
- chat/domain_knowledge, chat/tools, db/partition_manager: qualified_table() 적용
- FleetCompanyController: @Value DB_SCHEMA 동적화

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:14:06 +09:00
973b419287 fix: 모선 검토 패널 i18n 번역 키 추가 (ko/en)
parentInference.* 키가 누락되어 UI에 번역 키가 그대로 노출되던 문제.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:06:14 +09:00
8362bc5b6c feat: 어구 모선 추론 UI 통합 — FleetClusterLayer + 리플레이 컴포넌트 이식
ParentReviewPanel 마운트 + 관련 상태 관리를 FleetClusterLayer에 통합.
리플레이 컨트롤러, 어구 그룹 섹션, 일치율 패널 등 11개 컴포넌트
codex Lab 환경에서 검증된 버전으로 교체.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 00:48:48 +09:00
7dd46f2078 feat: 어구 모선 추론(Gear Parent Inference) 시스템 이식
Codex Lab 환경(iran-airstrike-replay-codex)에서 검증 완료된
어구 모선 자동 추론 + 검토 워크플로우 전체를 이식.

## Python (prediction/)
- gear_parent_inference(1,428줄): 다층 점수 모델 (correlation + name + track + prior bonus)
- gear_parent_episode(631줄): Episode 연속성 (Jaccard + 공간거리)
- gear_name_rules: 모선 이름 정규화 + 4자 미만 필터
- scheduler: 추론 호출 단계 추가 (4.8)
- fleet_tracker/kcgdb: SQL qualified_table() 동적화
- gear_correlation: timestamp 필드 추가

## DB (database/migration/ 012~015)
- 후보 스냅샷, resolution, episode, 라벨 세션, 제외 관리 테이블 9개 + VIEW 2개

## Backend (Java)
- 12개 DTO/Controller (ParentInferenceWorkflowController 등)
- GroupPolygonService: parent_resolution LEFT JOIN + 15개 API 메서드

## Frontend
- ParentReviewPanel: 모선 검토 대시보드
- vesselAnalysis: 10개 신규 API 함수 + 6개 타입

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 00:42:31 +09:00
2534c9dbca fix: time_bucket 수집 안전 윈도우 도입 — incremental fetch 데이터 누락 방지
snpdb 5분 버킷 데이터가 적재 완료까지 ~12분 소요되는데,
기존 fetch_incremental이 상한 없이 미완성 버킷을 수집하여
_last_bucket이 조기 전진 → 뒤늦게 완성된 행 영구 누락.

- time_bucket.py 신규: safe_bucket(12분 지연) + backfill(3 bucket)
- snpdb.py: fetch_all_tracks/fetch_incremental에 safe 상한 + 백필 하한
- vessel_store.py: merge_incremental sort+keep='last', evict_stale time_bucket 우선
- config.py: SNPDB_SAFE_DELAY_MIN=12, SNPDB_BACKFILL_BUCKETS=3

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:11:20 +09:00
67523b475d chore: requirements.txt에 tzdata 추가
ZoneInfo('Asia/Seoul') 사용 시 tzdata 미설치 환경 대비.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 07:13:30 +09:00
b8b60bf314 fix: timestamp fallback에서 UTC→KST 변환 추가
Codex 리뷰 지적: timestamp fallback 분기에서 UTC aware 값을
replace(tzinfo=None)로 tz만 제거하면 KST time_bucket과 9시간 어긋남.
astimezone(KST) 후 tz 제거하도록 수정.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 07:05:15 +09:00
d15039ce18 fix: vessel_store _last_bucket 타임존 오류 수정
snpdb time_bucket은 tz-naive KST인데 UTC tzinfo를 강제 부여하여
incremental fetch WHERE time_bucket > %s 비교 시 미래 시간으로 해석,
항상 0 rows 반환 → 1h 어구 그룹이 점진적으로 소멸하는 버그.

tz-naive 그대로 유지하도록 수정 (load_initial, merge_incremental 3곳).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 05:53:14 +09:00
e9ae058017 Merge pull request 'fix: 1h 활성 판정 parent_name 전체 합산 기준' (#220) from bugfix/1h-active-parent-sum into develop 2026-04-01 16:48:08 +09:00
5c85afea22 docs: 릴리즈 노트 업데이트 (1h 활성 판정 수정)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:47:22 +09:00
b04e96c457 fix: 1h 활성 판정을 parent_name 전체 합산 기준으로 변경
서브클러스터 분리 후 개별 서브그룹의 1h 멤버가 2개 미만이더라도,
parent_name 전체(모든 서브클러스터 합산)에서 1h 활성 멤버 >= 2이면
resolution='1h'로 저장하여 라이브 현황에 표시.

결과: 라이브 1h 그룹 5개 → 927개 정상 복구

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:47:01 +09:00
ae70eceb96 Merge pull request 'release: 2026-04-01.2 (6건 커밋)' (#218) from develop into main
All checks were successful
Deploy KCG / deploy (push) Successful in 1m42s
2026-04-01 15:05:27 +09:00
b320aeb3fd Merge pull request 'docs: 릴리즈 노트 정리 (2026-04-01.2)' (#217) from release/2026-04-01.2 into develop 2026-04-01 15:04:51 +09:00
e9cbeaa0d8 docs: 릴리즈 노트 정리 (2026-04-01.2) 2026-04-01 15:04:34 +09:00
acef08fca9 Merge pull request 'fix: 라이브 어구 현황 fallback 제외 + FLEET resolution' (#216) from bugfix/fleet-resolution-fix into develop 2026-04-01 15:03:11 +09:00
d44837e64a Merge pull request 'feat: 한국 현황 위성지도/ENC 토글 + ENC 스타일 설정' (#215) from feature/enc-map-toggle into develop 2026-04-01 15:02:56 +09:00
fc6f696d1f fix: 라이브 어구 현황 fallback 제외 + FLEET resolution + DB VARCHAR(8)
- 1h 실제 활성 멤버 < 2일 때 resolution='1h-fb' (fallback)로 저장
- LATEST_GROUPS_SQL은 resolution='1h'만 필터 → fallback 자동 제외
- FLEET 타입에 resolution='1h' 추가 (이전 누락)
- DB resolution 컬럼: VARCHAR(4) → VARCHAR(8) 확장
- 프론트 리플레이: '1h' + '1h-fb' 모두 1h 프레임으로 처리

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:00:16 +09:00
98d173701e fix: 라이브 어구 현황에서 fallback 그룹 제외
- 1h 실제 활성 멤버 < 2일 때 resolution='1h-fb' (fallback)로 저장
- LATEST_GROUPS_SQL은 resolution='1h'만 필터 → fallback 자동 제외
- 리플레이 history API는 1h-fb 포함 (리플레이/일치율 추적 유지)
- 프론트 리플레이: '1h' + '1h-fb' 모두 1h 프레임으로 처리

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 14:22:59 +09:00
a7eb706839 fix: FLEET 타입에 resolution='1h' 누락 — 라이브 현황 API에서 선단 그룹 미표시
FLEET 스냅샷에 resolution 필드를 설정하지 않아 DB default '6h'로 저장됨.
LATEST_GROUPS_SQL이 resolution='1h' 필터를 사용하므로 FLEET 전부 누락.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 14:17:27 +09:00
650c027013 feat: 한국 현황 위성지도/ENC 토글 + ENC 스타일 설정
- ENC 전자해도: gcnautical 벡터 타일 연동 (gc-wing-dev 이식)
- 상단 위성/ENC 토글 버튼 + ⚙ 드롭다운 설정 패널
- 12개 심볼 토글 + 8개 색상 수정 + 초기화
- mapMode/encSettings localStorage 영속화
- style.load 대기 패턴으로 스타일 전환 시 설정 자동 적용

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 14:08:41 +09:00
31f557e54d Merge pull request 'release: 2026-04-01 (55건 커밋)' (#214) from develop into main
All checks were successful
Deploy KCG / deploy (push) Successful in 1m41s
2026-04-01 12:36:34 +09:00
71a2188273 Merge pull request 'docs: 릴리즈 노트 정리 (2026-04-01)' (#213) from release/2026-04-01 into develop 2026-04-01 12:35:53 +09:00
138a1b82de docs: 릴리즈 노트 정리 (2026-04-01) 2026-04-01 12:35:26 +09:00
c59b38f913 Merge pull request 'feat: 어구 1h/6h 듀얼 폴리곤 + 리플레이 컨트롤러 개선 + 심볼 스케일' (#212) from feature/gear-replay-cleanup into develop 2026-04-01 12:33:00 +09:00
9200f45cb2 docs: 릴리즈 노트 업데이트 2026-04-01 12:32:08 +09:00
77efab8652 feat: 항공기 줌 스케일 + 선박/항공기 심볼 크기 조정 패널
- 항공기 아이콘에 정수레벨 줌 기반 스케일 적용 (getZoomScale export)
- 심볼 크기 조정: SymbolScaleContext + SymbolScalePanel (0.5~2.0x)
- LayerPanel에 '심볼 크기' 섹션 추가 (선박/항공기 개별 조정)
- localStorage 영속화 (mapSymbolScale)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 12:29:22 +09:00
71d607e499 feat: 어구 그룹 1h/6h 듀얼 폴리곤 + 리플레이 컨트롤러 개선
- Python: 1h/6h 듀얼 스냅샷 생성 (polygon_builder), 1h 멤버 기반 일치율 후보 (gear_correlation)
- DB: resolution 컬럼 추가 (011_polygon_resolution.sql)
- Backend: resolution 필드 지원 (DTO/Service/Controller)
- Frontend: 6h identity 레이어 독립 구현 (폴리곤/아이콘/라벨/항적/센터)
- 리플레이 컨트롤러: 프로그레스바 통합, 1h/6h 스냅샷 표시, A-B 구간 반복
- 리치 툴팁: 클릭 고정 + 멤버 호버 강조 + 선박/어구/모델 소속 표시

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 11:52:38 +09:00
f09186a187 feat: 어구 리플레이 서브클러스터 분리 렌더링 + 일치율 감쇠 개선
- 서브클러스터별 독립 폴리곤/센터/center trail 렌더링
- 반경 밖 이탈 선박 강제 감쇠 (OUT_OF_RANGE)
- Backend correlation API에 sub_cluster_id 추가
- 모델 패널 5개 항상 표시, 드롭다운 기본값 70%
- DISPLAY_STALE_SEC (time_bucket 기반) 폴리곤 노출 필터
- AIS 수집 bbox 122~132E/31~39N 확장
- historyActive 시 deck.gl 이중 렌더링 수정

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 09:01:03 +09:00
ce4cde56b8 Merge pull request 'feat: MapLibre → deck.gl 전면 전환 + 어구 서브클러스터 구조 개선' (#211) from feature/deckgl-ship-migration into develop 2026-03-31 15:59:06 +09:00
6f8e8cb6cc docs: 릴리즈 노트 업데이트
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 15:55:58 +09:00
313b5d9af8 chore: .claude/worktrees 제거 (로컬 전용)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 15:48:16 +09:00
b0ac1590f2 Revert "docs: Backend JAR 배포 경로 정확히 명시"
This reverts commit 9eac614910.
2026-03-31 15:48:03 +09:00