- DB tie_breaks 테이블 (category, winner_team, method, decided_at)
- compute_winners()가 동률 시 status='tie' 반환, tied 후보 표시
- 어드민: 동률 부문에 🎲 추첨 버튼 + 수동 선택 라디오 + 결정 취소
- 우승 표시에 결정 방식 태그 (🎲 추첨 / 🖊️ 수동)
- ceremony: 동률 미해결 발견 시 진입 차단, 어드민 처리 유도
흐름:
1. 어드민에서 동률 알림 확인
2. 즉석 추첨 또는 수동 선택으로 결정
3. ceremony 진입하면 정상 reveal
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 투표 폼에 사번 입력 필수 추가
- DB votes 테이블에 employee_id 컬럼 (마이그레이션 자동)
- 어드민 감사 로그 expander: 시각/이름/사번/본인팀/투표내역 표
- CSV 내려받기 버튼
- 같은 사번이 여러 이름으로 투표 시 자동 의심 마크
- 안내 expander에 사번 입력/추적 설명 추가
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
수상 결정 순서:
1. 실용성상(팜레스트, 최고가) → 1위 결정
2. 완성도상(양우산) → 1번 수상자 제외 후 1위
3. 재미상(손선풍기) → 1, 2번 수상자 제외 후 1위
발표(reveal) 순서는 그대로 손선풍기 → 양우산 → 팜레스트 (긴장감).
compute_winners() 헬퍼로 admin/ceremony 둘 다 동일 로직.
admin 분포 expander에 '상위상수상으로 제외' 마커.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3 단계 진행:
1. 시상식 시작 화면 → 시작 버튼
2. 부문별 announce (label + 상품) → 🥁🥁🥁 → 우승팀 공개 버튼
3. 우승팀 reveal: gradient gold 큰 폰트 + balloons + fadeIn 애니메이션
4. 다음 부문 → 반복 → 모든 시상 완료 (snow + balloons)
진행자 클릭만으로 진행. session_state로 단계 관리.
CATEGORIES에 상품 매핑 (재미상=손선풍기, 완성도상=팜레스트, 실용성상=양우산).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- docker-compose가 .env 자동 로드
- .env는 gitignore (token 노출 방지)
- .env.example 템플릿 추가
- README 절차 업데이트
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- DB 테이블 team_titles 추가
- 어드민 페이지에 팀별 제목 입력 폼 (저장 즉시 반영)
- 투표 라디오 옵션이 '팀1 — 결과물 제목' 형식으로 표시
- 우승 발표/시상 텍스트에도 제목 포함
- 제목 미입력 시 팀명만 (fallback)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 한지승 4명팀 배치 금지 (지각 시 3명 방지)
- 한지승 팀에 다른 시니어 ≥1 필수 (지각 시 시니어 0 방지)
- 출력에 ⏰ 마크 추가
결과: 한지승 → 팀5 (5명), 팀5 다른 시니어 김병훈 동행
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
기존 round-robin은 운에 따라 부서 분포 max-min=2 발생 (예: HPC 2,1,0,1,1,2,1).
ceil 슬롯을 ceil_count 적은 팀에 우선 배정하여 모든 부서 max-min ≤ 1 보장.
결과:
- EffTech [1,2,2,2,2,2,1]
- System [2,1,1,1,1,1,1]
- HPC [1,1,1,1,1,1,2]
- Data [1,1,1,1,0,1,1]
- Platform [0,0,0,0,1,0,0] (1명)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
기존 제약(같은 부서 ≤2명) 만으로는 EffTech 0명인 팀 발생 (재배정 전 팀2).
신규 부서 ≥1명 제약 추가로 모든 팀이 기존-신규 섞이도록 보장.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- assign_teams.py: 부서 다양성 제약(같은 부서 ≤2명) 시드 고정 배정
- participants.json: 이름→팀 매핑 산출물
- app.py: 이름 선택 → 본인 팀 자동 표시 (수동 입력 부정 차단)
- 어드민 참여율 메트릭 + 미투표자 목록
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 35명/7팀/3분야(재미·완성도·실용성) 투표
- 본인 팀 제외 자동 처리
- 이름 UNIQUE 중복 방지
- 진행자 어드민 페이지: 1위와 2위 차이만 공개, 하위 팀 표수는 비공개
- sqlite 단일 파일 저장
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>