-
v2.11.2 Stable
released this
2026-06-04 19:22:00 +09:00 | 0 commits to main since this release[2.11.2] — 2026-06-04
Fixed
- 통계 차트가 빌드(main.exe)에서 안 뜨던 진짜 원인 — frozen 빌드에서 numpy C-확장
numpy.core._multiarray_tests가 누락(numpy.testing제외의 영향)되어 matplotlib import가
ModuleNotFoundError로 실패 → "matplotlib 필요" 폴백.main.spec에 해당 모듈 hiddenimport
추가 +numpy.testing제외 제거. (디버그 로그로 원인 확인: chart_widget이 실패 사유를 기록) - 도전과제 라이트 테마 가독성 — 헤더 강조 숫자/등급 배지/진행 숫자/진행 바를 라이트에서
대비 높은 색으로 조정 (다크는 기존 비비드 색 유지).
Downloads
- Source Code (ZIP)
- Source Code (TAR.GZ)
-
ClockOutCalculator-v2.11.2.zip
86 MiB
-
main.exe
80 MiB
-
updater.exe
6.2 MiB
- 통계 차트가 빌드(main.exe)에서 안 뜨던 진짜 원인 — frozen 빌드에서 numpy C-확장
-
v2.10.2 Stable
released this
2026-05-16 18:16:45 +09:00 | 4 commits to main since this release[2.10.2] — 2026-05-16
Fixed
- 휴일/주말 근무 시 카운터 초가 항상
00으로 멈춰 보이던 문제 (사용자 보고)- 원인: 휴일 분기에서
calculate_holiday_overtime의 분 절삭값(적립 단위)을
그대로 표시에 사용 → 초 정보 소실 - 수정: 표시용
remaining을 초 정밀도 timedelta로 분리 계산
(적립 계산은 퇴근 시 분 단위 그대로 — 영향 없음) - 차감 항목(점심·저녁·외출·연장 사용)은
calculate_holiday_overtime과 동일하게 적용
- 원인: 휴일 분기에서
Downloads
- Source Code (ZIP)
- Source Code (TAR.GZ)
-
ClockOutCalculator-v2.10.2.zip
84 MiB
-
main.exe
78 MiB
-
updater.exe
6.2 MiB
- 휴일/주말 근무 시 카운터 초가 항상
-
released this
2026-05-01 18:33:55 +09:00 | 5 commits to main since this releaseFixed — 업데이트 시 cmd 창 깜빡임 제거
updater.spec:console=True→console=False(windowed 빌드).
자동 업데이트 적용 시 잠깐 뜨던 까만 cmd 창이 더 이상 보이지 않음.updater.py: stderr 출력을~/.clockout_logs/updater.log파일 폴백으로 전환
— windowed 모드라도 진단 로그는 보존. 모든 단계(시작/PID 대기/replace/launch)
에 타임스탬프 + 결과 기록.updater.py launch():subprocess.Popen에CREATE_NO_WINDOW플래그 추가
(DETACHED_PROCESS와 함께) — 자식 프로세스가 콘솔을 새로 만들지 않음.utils/updater_client.py apply_update(): 같은 패턴으로CREATE_NO_WINDOW추가.
main.exe → updater.exe 호출 시점에서도 콘솔 생성 차단.
Downloads
- Source Code (ZIP)
- Source Code (TAR.GZ)
-
Clock_out_Time_Calculator_v2.10.1.zip
79 MiB
-
main.exe
73 MiB
-
updater.exe
6.1 MiB
-
v2.10.0 Stable
released this
2026-05-01 13:51:33 +09:00 | 6 commits to main since this release[2.10.0] — 2026-05-01
Added — 정부 공휴일 API 자동 동기화
- 공공데이터포털 특일정보 API 연동 (
utils/holiday_api.py)- 한국천문연구원 운영 공식 데이터 —
/getRestDeInfo엔드포인트 - 임시공휴일·근로자의 날까지 정부 공인 데이터로 보강
- 일일 한도 10,000회 / 사용자 50명 = 0.5% 사용
- 키는 dev 본인 계정의 특일정보 API 한정 키
- 한국천문연구원 운영 공식 데이터 —
Database.add_korean_holidays_from_api(year)— 정부 API 1차 시도add_korean_holidays_auto()동작 변경 — 1차 정부 API → 2차 fallbackholidays패키지migrate_v290_holidays_auto_sync— 일 1회 자동 동기화 (백그라운드 스레드)- sentinel:
settings['holidays_synced_date'] - 매일 호출 → 정부가 임시공휴일 발표하면 다음 날 자동 반영
- 부트스트랩 비차단 (네트워크 호출은 daemon thread)
- 테스트 환경:
CLOCKOUT_DISABLE_HOLIDAY_SYNC=1로 비활성화
- sentinel:
Changed
- 설정 → "한국 공휴일 자동 추가" 버튼 안내문 — 1차 정부 API / 2차 holidays 패키지
Tests
tests/test_holiday_api.py14개 신규 (응답 파싱 / 단일/다중 item / 401·timeout / 응답 검증)tests/conftest.py— 모든 테스트에서 백그라운드 동기화 비활성화- pytest: 175 → 189
주의
- 키 활용기간 시작 직후엔 백엔드 propagation으로 401 가능 (1~2시간 또는 익일 활성화).
401 시 fallback (holidays 패키지 + 근로자의 날 명시 추가) 정상 동작 — 사용자 영향 없음.
Downloads
- Source Code (ZIP)
- Source Code (TAR.GZ)
-
ClockOutCalculator-v2.10.0.zip
84 MiB
-
main.exe
78 MiB
-
updater.exe
6.2 MiB
- 공공데이터포털 특일정보 API 연동 (
-
v2.9.0 Stable
released this
2026-05-01 13:13:01 +09:00 | 7 commits to main since this release[2.9.0] — 2026-05-01
Fixed — 휴일 hot-path 버그 (사용자 보고)
- 휴일에 출근해도 정상 출근으로 처리되어 추가근무 적립이 안 되던 문제
update_display()1Hz 루프에is_non_working_day분기 누락으로 휴일에도
"남은 시간 8h"부터 카운트다운 → 실제 출근 즉시 적립이 시작되지 않음- 수정: 출근 직후부터 음수 remaining 표시, "공휴일 근무 (전체 적립)" 그룹 타이틀
- 진행바: 휴일은 100% 고정 (의미 없음)
- 예상 퇴근: "휴일 근무 (정해진 퇴근시각 없음)"
- 휴일 "퇴근 30분 전" 알림 게이팅 — 휴일엔 정해진 퇴근시각이 없으니 무의미한 알림 스킵
- 자동복구 퇴근 3곳의
// 30) * 30하드코딩 → 사용자overtime_unit(15/30/60) 설정 적용 - 4곳에 중복되던 휴일 연장 계산 로직을
TimeCalculator.calculate_holiday_overtime()헬퍼로 통합
Added — 연차 미리등록 + 통합 스케줄 + 반복 연차 (Phase 1+2)
Phase 1 — 연차 미리등록 + 자동 적용
- DB:
get_leave_minutes_for(date)/has_full_day_leave(date)/
get_leave_records_by_date(date)/get_leave_records_by_range(start, end) - TimeCalculator:
effective_work_minutes(date_obj, db)— 부분 연차만큼 정규 근무 차감 - 종일 연차일 자동 처리:
- 자동 출근감지 스킵 (event_monitor 호출 안 함)
- "🌴 오늘은 휴가" 카드 표시, 카운트다운 제거
- 메인/미니 위젯/트레이 모두 일관된 휴가 상태 표시
- 종일 연차 + 출근 override: 휴일처럼 전체 시간 적립 (사용자 확인 후)
- 부분 연차 (반차/반반차/시간): 기존 leave_used 경로로 카운트다운 단축
- AddLeaveDialog 검증 강화: 미래 1년 setMaximumDate / 주말·공휴일 차단 / 같은 날 1일 초과 차단
- leave_calendar_view: 예정(파랑) / 사용완료(녹·노·보) 색상 분리
Phase 2 — 통합 스케줄 + 반복 연차
recurring_leaves테이블 (pattern/leave_type/days/start_date/end_date/memo)core/recurring_leaves.py: weekly / biweekly / monthly 패턴 파서 + expand_for_range/date- 자동 합산:
get_leave_minutes_for()/has_full_day_leave()가 반복 패턴 인스턴스도 함께 검사 ui/recurring_leave_dialog.py: 매주/격주 요일 또는 매월 N일 입력ui/schedule_view.py: 월간 통합 캘린더 (휴일·연차·반복 색상 구분 + 우클릭 삭제)- 진입점: MainWindow.show_schedule(), 트레이 "🗓️ 스케줄", LeaveView "🗓️ 스케줄"
Changed
- 근로자의 날(5/1) 자동 추가 —
holidays.KR패키지가 누락하는 노동자 휴일을
add_korean_holidays_auto()에서 명시적 보강 (매년 반복)
Tests
- pytest: 122 → 175 (+53)
tests/test_recurring_leaves.py32개 (패턴 파싱/매칭/expand/describe)tests/test_database.py+12 (TestLeaveQueriesByDate + TestRecurringLeavesDB)tests/test_time_calculator.py+9 (TestHolidayOvertime)
- 통합 시나리오: 48 → 53 (+5)
- S52A 휴일 hot-path / S52B 종일 연차 / S52C 반복 패턴 / S52D 반차 effective / S52E 종일 effective
Downloads
- Source Code (ZIP)
- Source Code (TAR.GZ)
-
ClockOutCalculator-v2.9.0.zip
84 MiB
-
main.exe
78 MiB
-
updater.exe
6.2 MiB
- 휴일에 출근해도 정상 출근으로 처리되어 추가근무 적립이 안 되던 문제
-
released this
2026-05-01 01:11:13 +09:00 | 10 commits to main since this releaseAdded — 도전과제 시스템 + 디자인 리뉴얼
- 🏆 도전과제 시스템 (153개 자동 평가) — 출근·퇴근·연장·연차·식사·외출·계절·시간대·시크릿 등 16개 카테고리.
core/achievements.py:Achievementdataclass +evaluate_all(db)+sync_definitions_to_db(db).- 5분 throttle로 자동 평가, 신규 잠금 해제 시 시스템 알림 + Discord embed push.
achievements테이블 확장:code(UNIQUE),category,tier,is_secret,progress,target,created_at컬럼 추가 (idempotent 마이그레이션).- 5단계 등급: 🥉 브론즈 / 🥈 실버 / 🥇 골드 / 💎 플래티넘 / 🌟 레전드.
- 시크릿 9개 (회문, 잭팟 시각, 13일의 금요일, 7-7-7, 정확 8시간, π day, 피보나치 등).
- 메타 도전과제 (도전과제 자체 달성 카운트).
ui/achievements_view.py— 4탭 다이얼로그 (전체 / 진행 중 / 완료 / 시크릿).- 등급별 그라디언트 카드, 진행 게이지, 카테고리 태그, 시크릿 ❓ 처리.
- 자동 hire_date 추적 — 첫
add_work_record호출 시 settings에 자동 기록 (1주년, 365일 후 출근 등 도전과제 활성화). - 뷰 진입 카운터 —
stat_*_view_count,calendar_view_count,daily_report_count등 8개 settings 키. 도전과제 + 사용 통계용.
Changed — 다크 테마 디자인 리뉴얼
ui/dark_components.py신설 — 재사용 가능한 다크 디자인 컴포넌트:dialog_qss(),tabs_qss(),scroll_qss(),button_qss(variant).build_gradient_header(),build_stat_card(),build_section_card().style_progressbar(),transparent_label()— 글로벌 QSS 충돌 회피.- 카드 테마 7종: blue / cyan / green / gold / pink / red / gray.
ui/stats_view.py— 4분할 카드 + 차트 섹션 카드. 골드 강조 탭. ghost 닫기 버튼.ui/help_view.py— 다크 톤 + HelpHTML 내부에 다크 CSS 주입 (h1/h2/h3, code, blockquote, table 컬러).ui/chart_widget.py— 모든 matplotlib 차트 다크 테마 적용 (figure/axes facecolor, grid, ticks, legend).- 온보딩 위저드 — 저녁 분(minutes) 입력 옵션 + i18n화 (Korean/English 프리셋 라벨).
Fixed — 안정성·일관성
- 타임존 자정 경계 버그:
has_notification_today가CURRENT_TIMESTAMP(UTC) vsDATE('now', 'localtime')mismatch로 KST 0~9시 사이 알림 중복 발송 가능 —DATE(sent_at, 'localtime')양쪽 적용. - DB 연결 누수 가드 —
_conn()컨텍스트 매니저 도입, 40+ 메서드 변환 (직접get_connection()호출 0건). - DB 이중 부트스트랩 제거 —
MainWindow(db=None)옵션 인자 추가, main.py가 만든 db를 재사용. - crash_handler 폴백 — DB 로깅/다이얼로그 단계 분리, 모두 실패해도
~/.clockout_logs/crashes.log에 기록. - updater PID race window — 지수 backoff 재시도 (0.3→4.8s, 총 ~9초). Windows Defender 락 해제 대기 충분.
- Discord URL 형식 검증 — Snowflake ID 17~20자리 + 50+자 토큰 정규식.
- MealTimeDialog — 출근 시각 범위 검증 + 야간 출근자 자정 경계 자동 처리.
- CSV importer/exporter —
dinner_minutes컬럼 round-trip 지원. - 일일 보고서 — 저녁 섹션 추가 (이전엔 점심만 표시),
break_type분리, 자정 경계 처리. - 저녁 알림 —
check_dinner_reminder()신규 (점심 알림과 대칭). - 알림 임계값 설정화 — 5개 하드코딩 값(점심/저녁 알림 시간, 연장 누적, 주간 한도, 연속 야근)을 settings로 노출.
- closeEvent 정리 —
aboutToQuit시그널로 timer/notifier/tray 정리. - 마이그레이션 일관성 — 12개 마이그레이션 모두
_conn()+ try/finally 보장.
DB 인덱스 (성능)
idx_break_records_date_type,idx_break_records_date.idx_overtime_bank_date,idx_overtime_usage_date,idx_leave_records_date.
Tests
- pytest 116개 PASS, 통합 시나리오 44/48 PASS (PyQt 환경 4개 제외).
- 도전과제 한 사이클 시나리오 검증 (30일 시뮬레이션 → 19개 자동 잠금 해제).
Downloads
- Source Code (ZIP)
- Source Code (TAR.GZ)
-
Clock_out_Time_Calculator_v2.8.0.zip
79 MiB
-
main.exe
73 MiB
-
updater.exe
6.1 MiB
- 🏆 도전과제 시스템 (153개 자동 평가) — 출근·퇴근·연장·연차·식사·외출·계절·시간대·시크릿 등 16개 카테고리.
-
v2.7.0 Stable
released this
2026-04-30 19:30:47 +09:00 | 11 commits to main since this release[2.7.0] — 2026-04-30
Added — 폴리싱 릴리스 (사용자 가시 변화는 작지만 i18n + 테스트 + 구조 개선)
- i18n 사전 100% 커버리지 —
break_view,overtime_view,leave_view,
clock_in_dialog의 내부 라벨/메시지/플레이스홀더까지 전부 ko/en 키화.
새 키 50+개 추가 (view.break.*,view.overtime.*,view.leave.*,dlg.*). - i18n 런타임 재번역 — 재시작 없이 메인 화면 즉시 언어 전환.
ui/i18n_runtime.py:register(widget, key)+set_language_and_retranslate(lang)- 위젯은 weakref로 보관되어 삭제 시 자동 정리
- 메인 윈도우 타이틀/하단 메뉴 5개 버튼 등록 완료 (점진 확대)
- 일부 다이얼로그는 여전히 재시작 필요 (다음 릴리스에서 점진 등록)
- MealController 분리 —
main_window.py에서 점심/저녁 토글·라벨 갱신 로직을
ui/controllers/meal_controller.py로 추출. 기존LockMonitor/AutoLunch/
NotificationOrchestrator패턴 준수.
Tests
- 통합 테스트 +15 시나리오 (S36–S52): 온보딩 신규/기존, salary 추정, CSV 가져오기
(skip/overwrite/overtime 적립까지), notification_log dedupe, meal_record,
crash_log, updater semver 비교, Discord 입력 검증, goal/accessibility 키 등. - 신규 pytest 모듈 4종 —
test_salary.py,test_csv_importer.py,
test_discord_webhook.py(network mocked),test_crash_handler.py. test_i18n_runtime.py— register/retranslate/post-callback/dead-widget 정리 검증.- 총 pytest 케이스: 90 → 122, 통합 시나리오: 33 → 48.
Docs
README.mdv2.4–v2.6 신기능 섹션 정리, 재번호.CLAUDE.mdv2.6+ 아키텍처 — 컨트롤러 모듈, 35+ 설정 키, 릴리스 플로우 반영.INSTALL.md최신 단일파일 배포 + 온보딩 + 디스코드 + 환경변수 정리.AGENTS.md10+ DB 테이블, 컨트롤러 맵, Past Incidents 갱신.
Downloads
- Source Code (ZIP)
- Source Code (TAR.GZ)
-
ClockOutCalculator-v2.7.0.zip
84 MiB
-
main.exe
78 MiB
-
updater.exe
6.2 MiB
- i18n 사전 100% 커버리지 —
-
v2.6.0 Stable
released this
2026-04-30 18:54:25 +09:00 | 12 commits to main since this release[2.6.0] — 2026-04-30
Added — Phase 4 (3종)
- 글꼴 크기 조절 (100% / 125% / 150%) — 설정에서 즉시 반영
- 고대비 모드 — 검정 배경 + 노란 텍스트 (시각약자/야간)
- 코드 서명 인프라 —
release.ps1에 Authenticode 서명 단계 추가 (옵션)$env:CODE_SIGN_CERT(.pfx경로) +$env:CODE_SIGN_PASS환경변수 설정 시 자동 서명- signtool.exe 없거나 cert 미설정 시 자동 스킵
- 코드 서명 인증서 확보 후 활성화하면 SmartScreen 경고 제거 가능
Settings (신규)
font_scale,high_contrast
Downloads
- Source Code (ZIP)
- Source Code (TAR.GZ)
-
ClockOutCalculator-v2.6.0.zip
84 MiB
-
main.exe
78 MiB
-
updater.exe
6.2 MiB
-
v2.4.0 Stable
released this
2026-04-30 18:38:38 +09:00 | 14 commits to main since this release[2.4.0] — 2026-04-30
Added — Phase 2 (5종)
- 점심/저녁 실제 시간 입력 — 점심/저녁 버튼 우클릭 → 시작·종료 시각 입력 다이얼로그
- 자동 60분 대신 정확한 분 단위 기록 (
break_records.break_type='lunch'/'dinner')
- 자동 60분 대신 정확한 분 단위 기록 (
- 캘린더 우클릭 → 과거 일자 추가/편집/삭제
- 비어있는 날짜 우클릭: "기록 추가" — 출/퇴근/점심/메모 입력
- 기록 있는 날짜 우클릭: "편집"/"삭제"
- 월간 목표 설정 + 진행률
- 설정 → 월 연장근무 상한 (시간/분) + 일 평균 근무 목표 (시간)
- 통계 → 월간 탭에 진행률 게이지 (60%/100% 임계 시 색상 변경)
- 0=비활성 (비활성 시 위젯 자체 숨김)
- CSV 가져오기 — 표준 포맷
date,clock_in,clock_out,lunch_minutes,memo- 충돌 정책: 덮어쓰기/건너뛰기/취소
- 자동 Crash Report (Gitea Issues)
- 전역 예외 후킹 → crash_log 저장 + 사용자에게 다이얼로그
- "복사" / "Gitea에 보고" (PAT 옵션) — issue 자동 생성
Settings (신규 4개)
goal_overtime_max_monthly,goal_avg_hours_dailygitea_feedback_token,gitea_feedback_enabled
Downloads
- Source Code (ZIP)
- Source Code (TAR.GZ)
-
ClockOutCalculator-v2.4.0.zip
84 MiB
-
main.exe
78 MiB
-
updater.exe
6.2 MiB
- 점심/저녁 실제 시간 입력 — 점심/저녁 버튼 우클릭 → 시작·종료 시각 입력 다이얼로그
-
v2.3.3 Stable
released this
2026-04-30 18:23:51 +09:00 | 15 commits to main since this release[2.3.3] — 2026-04-30
Fixed
- Discord 웹훅 항상 실패하던 문제 (Cloudflare error 1010 / 403 Forbidden)
- 원인: Python 기본 User-Agent(
Python-urllib/3.x)를 Discord/Cloudflare가
봇으로 인식해 차단 - 수정:
utils/discord_webhook.py에 브라우저 UA 헤더 추가
(Mozilla/5.0 (Windows NT 10.0; Win64; x64) ClockOutCalculator/2.3) - 이제 온보딩 위저드의 "테스트 메시지 보내기" + 출퇴근/휴식 push 모두 정상 동작
- 원인: Python 기본 User-Agent(
Downloads
- Source Code (ZIP)
- Source Code (TAR.GZ)
-
ClockOutCalculator-v2.3.3.zip
84 MiB
-
main.exe
78 MiB
-
updater.exe
6.2 MiB
- Discord 웹훅 항상 실패하던 문제 (Cloudflare error 1010 / 403 Forbidden)