- KIS subscribe·unsubscribe ACK를 action과 공식 오류 코드별로 분류해 멱등 성공, 인증 재연결, 구독 단위 재시도, 종목별 park·영구 거부, 세션 충돌 backoff를 독립 처리
- 물리 구독의
desired·pending·subscribed·parked·rejected상태와 시세 freshness의no_data·fresh·quiet·stale상태를 분리하고 Property Inspector 선택 진단에 연결 - 모든 버튼의
setImage를 초당 최대 30회·최소 34ms 간격으로 직렬화하는 전역 last-write-wins·round-robin 렌더 큐와 큐 지연 진단 추가 - 실제 loopback WebSocket과 패키징된 가짜 Stream Deck host, 실제 Elgato SDK import 경로를 검증하는 연결·렌더·치명 오류 통합 테스트 추가
- approval key를 자격증명 세대별 24시간 메모리 lease로 재사용하고 만료 5분 전·자격증명 변경·인증 오류에서만 갱신하도록 변경
- 마지막 구독 해제 시 2초 idle grace 후 정상 close하고, wake 시 장 상태 재계산·timer 정리·즉시 heartbeat probe 후 필요한 경우에만 한 번 재연결하도록 변경
- 144×144 카드의 우선순위를 가격, 등락폭·등락률, 종목명·상태 순으로 재배치하고 상승은 초록색 명시적
+, 하락은 빨간색-, 보합은 회색으로 표시 - 설정 읽기 실패 중에도 마지막 검증 자격증명을 유지하고 지수형 백그라운드 재읽기로 회복하며 canonical 동일 설정과 내부 settings echo는 세션 재생성을 생략
- 틱 처리에서 세션 snapshot과 exact
(trId,trKey)인덱스를 재사용하고 해외 ticker 보조 인덱스로 정상 라우팅을 O(1)화
- KIS
PINGPONG을 문자열 전송 대신 동일 raw payload의 WebSocket pong control frame 정확히 한 번으로 응답하도록 수정 - 정상 unsubscribe와 이미 해제된 ACK가 전체 재연결을 일으키지 않고,
OPSP0008은 해당 종목만 REST로 park하도록 수정 - 정규장·프리·애프터의 무체결 quiet 상태를 연결 장애로 오판하거나 장 마감 중 시세를 불필요하게 aging하던 문제 수정
- 설정 read 일시 실패, recoverable REST 오류, malformed frame과 개별 재구독 실패가 전체 transport를
BROKEN으로 오염시키던 문제 수정 - SDK가 선등록한 uncaught logger보다 앞서 원문 예외를 차단하고 고정된 오류 분류만 한 번 기록한 뒤 host 재기동용 exit(1)로 종료하도록 보강
- 사용되지 않는 레거시 WebSocket manager, auth·REST·settings 구현, 국내·해외 parser, 구형 카드 renderer와 관련 테스트·설계 문서 제거
- 시세 카드 하단의 등락폭은 왼쪽 끝, 등락률은 오른쪽 끝에 같은 행으로 배치해 정보를 한눈에 비교할 수 있도록 변경
- 등락폭·등락률의 합산 예상 폭에 따라 글꼴을 함께 축소하고 극단적으로 긴 값만 비례 폭 제한을 적용해 양끝 배치에서도 중앙 간격이 유지되도록 보강
- 시세 카드의 등락폭과 등락률을 중앙 정렬된 세로 2행으로 배치하고, 등락률에서는 중복되는
+/-부호를 생략 - 국내·미국 시세 방향 색상을 한국 사용자 관례에 맞춰 상승=빨강, 하락=파랑, 보합=회색으로 변경
- 다섯 자리 이상 등락폭과 등락률이 같은 행에서 겹쳐 144×144 카드 레이아웃이 깨지던 문제 수정
- Property Inspector를 상단 공통 연결 상태와
이 버튼·KIS 계정·전체 버튼 환경설정·문제 해결목적별 accordion으로 재구성하고, 적용 범위 badge와 명시적 chevron, 닫힌 영역의 동적 요약을 추가 - 국내·미국 WebSocket과 REST가 제공하는 전일 대비 등락폭을 보존해 시세 카드 하단에 등락폭과 등락률을 2열로 함께 표시
- 화면 반영 방식을 접근 가능한 실시간/스로틀링 선택 UI로 바꾸고, 실시간에서는 스로틀 간격을 숨기되 마지막 유효값은 보존해 스로틀링 복귀 시 복원
- 전체 버튼 환경설정은 실제 변경이 있을 때만 저장할 수 있고 저장 중 중복 요청을 막으며, 저장 응답을 기다리는 동안의 추가 편집을 보존하도록 개선
- 자격증명 삭제 전에 모든 국내·미국 버튼의 시세 중단을 확인하고, 문제 해결 안의 상세 진단은 처음 펼칠 때만 자동으로 불러오도록 변경
- 늦거나 충돌한 설정 응답과 무관한 진단 snapshot이 최신 환경설정 편집·저장 결과·문제 해결 피드백을 덮거나 KIS 계정 영역을 잘못 여는 문제 수정
- REST 시세를 단일 exact-key snapshot으로 검증하고 KIS sign code로 등락폭·등락률 부호를 함께 정규화해 누락·손상·모순된 값이 렌더 경계를 통과하지 않도록 보강
- 가격과 등락률은 같고 등락폭만 바뀐 tick이 렌더 중복 제거에서 누락되던 문제 수정
- 모든 주식 버튼에 공유되는 전역 화면 반영 방식으로 50ms 최신값 병합
실시간과 500~1000ms(100ms 단위)스로틀링모드 추가
- 신규 설치, 손상·누락된 UI 설정, 기존 2·5·10초 렌더 설정을
스로틀링 + 1000ms로 정규화 - 실행 중 화면 반영 설정 변경은 활성 국내·미국 버튼의 렌더 간격에 즉시 적용하되 WebSocket 재연결·재구독과 REST 정책 재시작은 하지 않도록 변경
- Property Inspector의 request/revision/epoch/sequence 경계를 강화해 오래되거나 안전하지 않은 snapshot과 플러그인 재시작이 최신 입력을 덮지 않도록 수정
- 모든 WebSocket 시세를 처리하면서 일반 체결 화면은 선택한 2·5·10초 창마다 최신값만 반영하도록 화면 갱신 제한을 명확히 적용
- 일반 시세 카드의 하단 연결·지연·새로고침 상태 텍스트를 제거하고 종목명 색상과 앞쪽 점으로 상태를 간결하게 표시
- KIS WebSocket 구독 응답의 header subscription key를 인식하지 못해 정상 구독 결과가 연결 상태에 반영되지 않던 문제 수정
LIVE·BACKUP·BROKEN·대기 상태를 종목명 색상과 앞쪽 점으로 구분하고 stale·refreshing 상태가 연결 상태 색상을 덮지 않도록 개선
- 긴 종목명이 상태 표시와 겹치던 레이아웃을 보정하고 v2·레거시 카드의 저하 상태 표시를 일관되게 정리
- 국내 ETF 현재가 조회와 실시간 시세 표시 지원
SettingsRepository,CredentialSession,RestCoordinator,ConnectionSupervisor,SubscriptionSupervisor,MarketAdapter,StockActionController,RenderScheduler,DiagnosticsStore기반 v2 런타임 구조- 국내 주식·ETF·미국 주식의 공통 상태 머신 액션 엔진과 버튼 lifecycle generation fencing
- allowlist 명령만 처리하고 Secret·token·approval key를 노출하지 않는 Property Inspector 설정·진단 프로토콜
- Node.js 24 CI, 전체 line 80%와 핵심 런타임 그룹 branch 80% coverage 게이트
- 실제
.streamDeckPlugin을 안전하게 추출하고 SDK 전이 의존성을 resolve하는 archive smoke test
@elgato/streamdeck을 정확히 2.1.0,ws를 정확히 8.21.0으로 고정- 최소 지원 버전을 Stream Deck 7.1과 플러그인 Node.js 24로 상향하고 SDKVersion 2 유지
- 설정을 v2 스키마로 자동 이전하고 자동/REST 전용, 렌더 2·5·10초, 백업 15·30·60초 프리셋으로 단순화
- WebSocket을 재연결·heartbeat·구독 제어·41개 lease 순환 상태 머신으로 교체
- REST를 동시 4개·초당 10개 제한, 호출 우선순위, 공유 취소, 세션 캐시 기반 조정기로 교체
- 일반 렌더를 trailing last-write-wins로 제한하고 실제 SVG 문자열 기반 LRU와 semantic 중복 제거 적용
- release workflow가 공통 verify/package 스크립트를 재사용하도록 통합
- forced-exit Rollup 종료와 파일시스템 반영 사이를 bounded readiness barrier로 동기화
- 취약한 이전
ws잠금 버전을 제거하고npm audit --omit=dev를 검증 게이트에 추가 - fingerprint가 없는 legacy access token 폐기, 자격증명 세대 및 token-version CAS 적용
- archive path traversal, 심볼릭 링크, Windows 예약 경로, Unicode·대소문자 충돌, 깨진 manifest asset 참조와 비정상 크기 차단
- coverage report를 실제 production TypeScript source allowlist와 정확히 대조해 누락·주입 차단
- 초기화 중, 데이터 대기, 수동 새로고침 상태에 로딩 아이콘 표시
- 주말에는 국내/미국 장 상태를
마감으로 표시하도록 세션 판별 보정 - 미국 주간거래
tr_key선택이 주말에는 주간 세션으로 오판하지 않도록 수정
- Stream Deck 시작 직후 글로벌 설정보다 버튼이 먼저 뜰 때
설정 필요카드로 잘못 떨어지던 문제 수정 npm run local:install설치본에 런타임 의존성이 빠져 플러그인이 즉시 종료되던 문제 수정
- Property Inspector
연결 테스트버튼 및 관련 플러그인 메시지 처리 - PI 연결 테스트 전용 모듈/테스트 코드
연결 확인 중...상태 메시지 흐름
- 에러 타입별 버튼 카드 표시 (인증 실패, 네트워크 오류, 종목 오류, 자격증명 미설정)
- WebSocket 데이터 지연 시 "지연" 텍스트 표시 (BACKUP 상태, 20초 이상 미수신)
- 연결 회복 알림 카드 (BROKEN/BACKUP→LIVE 전환 시 2초간 표시)
- Property Inspector 종목코드 실시간 검증 (국내: 6자리 숫자, 해외: 1~6자 영문)
- Property Inspector "연결 테스트" 버튼 (KIS API 자격증명 즉시 검증)
renderErrorCard(): 문자열 메시지 파라미터에서 ErrorType enum으로 변경rest-price.ts: null 반환에서 ErrorType throw로 변경 (에러 전파 개선)
- 인증 실패 시 버튼이 무한 로딩 상태로 남는 문제 수정
- 유효하지 않은 종목코드 입력 시 피드백 없던 문제 수정