# Work Log - 2026-04-19 ## Summary 이번 작업에서는 송출 큐 동작, `경력_` 컷 계열 표출 규칙, 공약 직접 입력 기능, 사전 데이터 visibility 처리, 그리고 광역단체장 컷의 정당바 색상 적용 방식을 중심으로 정리했다. ## Recorded Changes ### 1. 다음 목록 즉시 송출 - 현재 송출 중인 상태에서도 대기열의 다음 목록을 바로 다음 on-air 순서로 넘길 수 있도록 `다음 목록 즉시 송출` 동작을 추가했다. - 운영자가 `다음컷 즉시 송출`과 구분해서 사용할 수 있도록 큐 기반 즉시 송출 흐름을 분리했다. ### 2. `경력_` 컷 공약 직접 입력 - 공약 데이터는 외부 API 수신값이 아니라 고객사가 직접 입력하는 방식으로 정리했다. - 지역구/후보 단위로 공약을 입력할 수 있도록 편집 모델과 저장 로직을 추가했다. - 공약 텍스트 유무에 따라 `공약그룹01`, `공약그룹02`, `공약그룹03`의 `visible` 값을 함께 제어하도록 반영했다. 관련 구현 파일: - `Tornado3_2026Election/Domain/CareerPromiseModels.cs` - `Tornado3_2026Election/Services/CareerPromiseService.cs` - `Tornado3_2026Election/ViewModels/CareerPromiseEditRowViewModel.cs` - `Tornado3_2026Election/ViewModels/DataViewModel.cs` - `Tornado3_2026Election/ViewModels/MainViewModel.cs` - `Tornado3_2026Election/MainWindow.xaml` ### 3. `경력_` 컷 후보 표출 규칙 - `경력_` 컷은 지역구당 1명만 나가는 방식이 아니라, 해당 지역구의 모든 후보가 순차적으로 표출되도록 수정했다. - 후보 정렬 기준은 득표율 순이 아니라 기호 순으로 고정했다. - `기호텍스트NN`은 고정 문자열 `기호`를 유지하고, `기호NN`에는 `01 -> 1`, `02 -> 2`처럼 정규화된 기호 번호를 사용하도록 정리했다. 관련 구현 파일: - `Tornado3_2026Election/Domain/FormatCutDefinition.cs` - `Tornado3_2026Election/Services/ChannelScheduleEngine.cs` - `Tornado3_2026Election/Models/CandidateEntry.cs` - `Tornado3_2026Election/Models/CandidateState.cs` - `Tornado3_2026Election/Services/SbsElectionApiClient.cs` - `Tornado3_2026Election/Services/KarismaTornado3Adapter.cs` ### 4. 사전 데이터 visibility 처리 - `사전_역대당선자` 계열은 회차 데이터가 비어 있으면 해당 회차 그룹의 `visible`을 `false`로 내리도록 반영했다. - 예: 1대 데이터가 없으면 `그룹01 = visible false`. ### 5. 무투표 당선 처리 - 후보가 1명이고 `degree = 80`인 경우는 무투표 당선(`UnopposedElected`)으로 처리되는 흐름을 유지한다. - 관련 판정은 `SbsElectionApiClient.MapJudgement` 기준으로 동작한다. ### 6. 광역단체장 컷 정당바 색상 적용 - `1-2위_ani_광역단체장` - `1-2위_ani_광역단체장_loop` - `1-2위_광역단체장` 위 컷들의 `정당바01`은 generated color asset으로 우회하지 않고, Karisma의 `Path Shape > Appearance > Face Color`에 직접 `SetStyleColor(face, order=0, ...)`를 적용하는 방식으로 정리했다. 확인 메모: - probe 기준 `SetStyleColor(face, order=0, ...)` 호출은 `RESULT_SUCCESS`로 확인했다. - RGB 값은 텍스트 스펙 값을 그대로 사용한다. - `더불어민주당 정당바 = 0,30,84` - `국민의힘 정당바 = 95,0,15` - `정당판`은 현재 운영 요구에 맞춰 asset alias 경로를 유지한다. ### 7. style-bound 오브젝트 주의사항 - style color binding이 있는 오브젝트는 후보 슬롯 clear 단계에서 들어간 빈 `SetValue("")`가 최종 payload에 남지 않도록 정리해야 한다. - 이 값이 남아 있으면 `Path Shape`의 face color가 적용되지 않은 것처럼 보일 수 있다. ## Verification Notes - `dotnet build Tornado3_2026Election/Tornado3_2026Election.csproj -c Debug -p:Platform=x64` 빌드는 통과했다. - 기존 경고는 `WindowsBase` 충돌 경고, 일부 미사용 이벤트, MSIX 인증서 관련 경고 수준으로 유지됐다. ## Follow-up Candidates - 사전투표율/개표율/후보 수 조건처럼 컷별 누락되기 쉬운 예외 규칙은 별도 체크리스트 문서로 분리해 두면 운영 검수에 유리하다. - `경력_` 계열과 광역단체장 계열은 실제 입력 데이터 샘플을 기준으로 회귀 점검 항목을 추가해 두는 것이 좋다.