Added (6 user-friendly features):
- Onboarding wizard (5 steps, forced on first launch, re-runnable from Help menu)
- Salary estimation (optional, hourly wage + overtime multiplier)
- Inline clock-in/out time editing (click label to edit)
- Today summary card (post-clockout, auto-hide on next clock-in)
- Health break reminder (continuous N-hour at desk warning)
- Discord webhook notifications (clock-in/out/health, mobile push, no server)
Database:
- break_records.break_type column ('break'/'lunch'/'dinner')
- notification_log table (dedupe + analytics)
- Auto-complete onboarding for existing users (work_records exists)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8.1 KiB
8.1 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
[2.3.0] — 2026-04-30
Added — Phase 1 + E1 (소비자 친화 6종)
- 첫 실행 온보딩 위저드 (강제) — 5단계: 환영 → 근무패턴 → 출근 감지 방식 → 연차/시급(옵션) → Discord(옵션) → 완료
- 신규 사용자: 자동 표시 / 기존 사용자(work_records 있음): 자동 완료 처리
- "도움말 → 온보딩 다시 보기" 메뉴로 언제든 재실행 가능
- 시급 → 추정 급여 (옵션) — 포괄임금이 아닐 때만 활성화
- 통계 화면 월간 탭에 "이번 달 추정 급여" 카드
- 퇴근 후 "오늘 요약" 카드에도 추정 급여 표시
- 연장수당 가산률 1.0 / 1.5 / 2.0 선택
- 출퇴근 시각 인라인 편집 — 메인 화면 출근/퇴근 라벨 클릭 → 즉시 수정 다이얼로그
- 퇴근 후 "오늘 요약" 카드 — 메인 화면 상단에 총 근무/점심/외출/연장/추정급여 표시
- 다음 출근 시 자동 숨김 / X 버튼으로 수동 닫기
- 장시간 근무 휴식 권고 알림 — 연속 N시간(기본 4시간) 자리 비움 없으면 "🌿 잠시 일어나세요" 토스트
- 5분 throttle + 일 1회 가드 (notification_log 테이블)
- Discord 웹훅 알림 (옵션) — 출퇴근/휴식권고 모바일 push
- 봇 등록·서버 운영 0. 채널 웹훅 URL만 입력
- 출근(녹색) / 퇴근 정시(파랑) / 퇴근 연장(주황) / 건강경고(분홍) embed
- 온보딩에서 즉시 활성화 + "테스트 메시지" 버튼
Database
break_records.break_type컬럼 추가 ('break' / 'lunch' / 'dinner' 구분)notification_log테이블 신규 (channel, event_type, sent_at, success — 중복 발송 가드 + 통계용)- 기존 사용자
onboarding_completed자동 true 처리 마이그레이션
Settings (신규 11개)
onboarding_completed,salary_enabled,hourly_wage,overtime_ratehealth_break_enabled,health_break_hoursdiscord_webhook_url,discord_notif_clock_in,discord_notif_clock_out,discord_notif_health
[2.2.4] — 2026-04-30
Added
auto_overtime옵션 실제 동작 — 기존엔 UI만 있고 동작 안 했음- OFF: 퇴근 시 적립 가능한 분이 있으면 "적립할까요?" 다이얼로그 표시 (Y/N)
- ON (기본): 자동 적립 (이전과 동일)
overtime_unit실제 동작 — 30/15/60분 단위 적립 선택 반영- 기존엔 무조건 30분 절삭. 이제 설정값 사용 (
time_calculator.calculate_overtimeunit_minutes파라미터)
- 기존엔 무조건 30분 절삭. 이제 설정값 사용 (
- 퇴근 알림 시점 사용자 설정 (
notification_before_minutes)- 기존 30분 하드코드 → 1~120분 SpinBox로 사용자 지정
- 설정 → 알림 그룹에 "퇴근 알림 시점" SpinBox
Removed (죽은 옵션 정리)
auto_detect_boot— 부팅 감지 비활성화 모드. 어디서도 안 쓰임notification_enabled— 마스터 스위치. 4개 개별 NOTIF_* 키로 충분annual_leave_used—leave_balance로 대체된 레거시 카운터
Fixed
- 죽은 옵션이 사용자에게 "동작하는 것처럼" 보이던 신뢰성 문제 일괄 해소
[2.2.3] — 2026-04-30
Fixed
updater.exe임베딩 빌드 안정화- v2.2.2에서
main.spec --clean이 빌드 시작 시dist/updater.exe를 지우면서 임베딩이 누락되던 문제 수정 release.ps1이dist/updater.exe를build/staging/로 복사 후 main.spec이 그걸 참조- main.exe 사이즈가 다시 ~78MB (updater 내장) 로 정상화
- v2.2.2에서
[2.2.2] — 2026-04-30
Added
- 윈도우 제목에 현재 버전 표시 — 자동 업데이트 후 신/구 버전 시각적 구분
- 예:
⏰ 퇴근시간 계산기 v2.2.2
- 예:
Test
- 자동 업데이트 더미 릴리스 — 단독 main.exe 배포 + 자가 업데이트 흐름 검증용
[2.2.1] — 2026-04-30
Added
updater.exe내장 (Single-file 배포)main.exe안에updater.exe를 PyInstallerdatas로 임베드- 시작 시
main.exe가 같은 폴더에updater.exe를 자동 추출 (없거나 사이즈 다르면 갱신) - 사용자는 이제
main.exe하나만 받아도 자동 업데이트 동작 - 업데이트로
main.exe가 교체되면 새 main 실행 시 새 updater.exe도 자동 갱신
utils/updater_client.py:_MEIPASSfallback — 권한 부족 등으로 추출 실패 시 TEMP에서 동작
Changed
release.ps1빌드 순서: updater 먼저 → main 나중 (datas 의존성)main.spec:dist/updater.exe존재 시 자동 임베드 (조건부 datas)
Fixed
- 한국어 릴리스 노트 인코딩 (
Get-ContentANSI →[System.IO.File]::ReadAllTextUTF-8)
[2.2.0] — 2026-04-30
Added
- 자동 업데이트 — Gitea Releases 기반
- 시작 5초 후 백그라운드 버전 체크 (silent)
- F5 또는 설정 → 데이터 관리 → "업데이트 확인" 버튼으로 수동 트리거
- 새 버전 발견 시 다운로드 →
updater.exe가 메인 종료 대기 → 파일 교체 → 재시작 - 실패 시 .bak 자동 롤백
core/version.py—__version__상수updater.py+updater.spec— 독립 자가 업데이터 (Python 표준 라이브러리만, 6MB)utils/updater_client.py— Gitea/GitHub 호환 Releases API 클라이언트release.ps1— 로컬 원클릭 릴리스 스크립트 (Runner 불필요)- 빌드 + 태그 push + Gitea Release 생성 + 자산 업로드 자동화
- CHANGELOG에서 릴리스 노트 자동 추출
--DryRun/--SkipTests옵션
Changed
Settings → 데이터 관리에 "버전 표시 + 업데이트 확인" 추가main.specdatas에 안내 주석 (updater.exe는 별도 배포)
[2.1.0] — 2026-04-29
Removed
- Claude AI 분석 기능 제거 — 외부 API 의존성 정리
- 로컬 HTTP API 제거 — 외부 위젯 연동 기능 미사용으로 정리
- pandas 의존성 제거 — 코드에서 미사용 (PyInstaller 빌드 사이즈 감소)
Added
- 첫 잠금 해제 = 출근 옵션 (
clock_in_on_unlock) — PC를 안 끄는 사용자 케이스 해결 - WAL 모드 + busy timeout — 클라우드 동기화 환경에서 다중 PC 동시 접근 안전성↑
MainWindow컨트롤러 분리 —LockMonitor/AutoLunchManager/NotificationOrchestratorupdate_display변화 감지 — 직전 값과 동일 시setText스킵 (1Hz hot-path 부하↓)- 언어 변경 시 자동 재시작 제안 — 사용자 동의 후
os.execv로 재시작 CHANGELOG.md+ GitHub Actions CI 추가
Changed
- 5분 throttle 알림 (건강/주간/누적)
_last_5min_bucket명시 가드 PyInstallerexcludes에pandas,numpy.testing,PyQt5.QtWebEngineWidgets추가
[2.0.0] — 2026-04-29
Added
- 단축근무 지원:
work_minutes(분 단위) + 5종 프리셋 (8h / 7h30m / 7h / 6h / 4h) - 자동 점심시간 적용 (출근 4h 경과)
- DB 자동 백업 (
~/.clockout_backups/, 7일 회전, SQLite backup API) - 화면 잠금 자동 외출/복귀
- 공휴일 자동 등록 (
holidays패키지, 음력 명절 포함) - 시스템 트레이 완전 통합 (점심/외출/통계/캘린더/도움말)
- 미니 위젯 (Always-on-top, 드래그 가능)
- matplotlib 차트 (일별/요일별 근무시간)
- 건강·주간·누적 알림 (3종 추가)
- i18n 인프라 (한국어/English, 28 카테고리, HelpView ko/en HTML)
- 설정 키 상수 모듈 (
core/settings_keys.py) - DB 경로 override (클라우드 동기화 폴더 지정 가능)
- 앱 단축키 7종 (Ctrl+O/L/D/B, F1, Ctrl+R, Ctrl+,)
- 사용 설명 가이드 (HelpView, 6 탭)
- 48 통합 시나리오 + 5 i18n GUI + 8 widget smoke 테스트
Fixed
- +29h remaining time bug —
break_minutes에서 overtime 차감하던 로직 수정 - annual_leave_total / annual_leave_days 키 불일치 — 양방향 자동 동기화
[1.0.0] — 2026-01-09
- 최초 릴리스: 자동 출퇴근 / 점심 관리 / 30분 단위 연장근무 적립 / 캘린더 / 통계