Spaces:
Runtime error
Runtime error
Commit History
-
Update chat_board.py
Unverified signature2acda5f -
feat: 실시간 의견 통계를 토론 보드 아래로 이동
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTb223874
-
fix: 대기실 중복 버튼, 빈 데이터 안내, AI 오류 처리, 데이터 한도 경고
ClaudeUnverified signature- lobby.py: 대기실에서 대기실로 이동하는 무의미한 버튼 제거 - teacher_records.py: 데이터 없을 때 안내 메시지 표시, DASHBOARD_FETCH_LIMIT 초과 시 일부만 다운로드됨 경고 - teacher_hint.py: AI 호출 try/except 처리, 네트워크 오류 시 st.error 표시 - teacher_summary.py: AI 호출 try/except 처리, 네트워크 오류 시 st.error 표시 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT37fa03a -
fix: 비가역적 제출 확인을 체크박스 → 텍스트 재입력으로 변경
ClaudeUnverified signature토론 전/후 생각 제출 시 체크박스 대신 "제출" 텍스트를 직접 입력해야 버튼이 활성화되도록 변경. 수정 불가 행위에 명시적 의도 확인 추가. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT9339cf7 -
fix: AI 피드백 파싱 실패 시 graceful fallback 처리
ClaudeUnverified signature1차: 정규식으로 잘한점/발전할점 섹션 파싱 2차: 실패 시 줄 수 기준 절반 분할 시도 최종: 모두 실패 시 레이블(🌟 AI 피드백)과 함께 마크다운으로 표시 기존에는 st.info()로 레이블 없이 원문이 그대로 노출됨 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT7c864eb -
fix: 토론 진행 제어 섹션을 대시보드 최상단으로 이동
ClaudeUnverified signature교사가 스크롤 없이 즉시 토론 종료/재개 버튼에 접근 가능. _render_debate_control은 fragment라 df_all 의존성 없어 최상단 배치 가능. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTb12984a -
fix: HCI 개선 1~4 — 에러코드 노출, 방 자동선택, 빈방 fallback, 토론상태 표시
ClaudeUnverified signature1. 에러 코드 노출 제거: 사이드바 방 개설 에러에서 내부 코드(VALIDATION_*) 숨김 2. 방 생성 후 자동 선택: 개설 즉시 캐시 초기화 후 새 방으로 자동 이동 3. 교사 방 없을 때 fallback: '기존 방 선택' 시 방이 없으면 안내 메시지 표시 4. 학생 토론 상태 배너: 진행 중/종료 여부를 항상 배너로 명시 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT9dcf3c3
-
fix: 토론 종료 버튼 무반응 — 제어 섹션을 fragment로 분리
ClaudeUnverified signature학생 접속이 많을 때 무거운 대시보드 렌더링이 버튼 반응을 막는 문제. _render_debate_control을 @st.fragment로 분리해 독립적으로 즉시 반응. 상태 변경 후 fetch_debate_status 캐시 초기화로 학생 감지 속도 개선. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTd3deb76 -
fix: 실시간 보드 삭제 반영, 내용 마크다운 렌더링, 참여도 자동갱신, 성능 개선
ClaudeUnverified signature1. 삭제 즉시 반영: on_click 콜백 → 직접 if 버튼 패턴으로 변경 후 fetch_live_messages.clear() + st.rerun(scope="app") 호출 2. 내용 표시 오류: st.info(content) 마크다운 해석 방지 — ~, *, _, ` 이스케이프 3. 학생 참여도 현황: @st.fragment(run_every=10)으로 분리해 자동 갱신 4. 성능: 워드클라우드 @st.cache_data(ttl=5) 캐싱으로 재생성 방지, 토론 상태 폴링 3초 → 5초로 완화 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTc65e101
-
feat: 입장 변화 요약을 3컬럼으로 변경 (바뀐/찬성유지/반대유지)
ClaudeUnverified signature입장 변화 요약 섹션을 2컬럼에서 3컬럼으로 변경. 입장 바뀐 학생, 찬성 유지, 반대 유지를 구분해서 표시. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTe5bb2a6 -
feat: 입장 변화/유지 학생 목록 표시
ClaudeUnverified signature입장 변화 현황 섹션에 토론 전후 입장이 바뀐 학생과 유지한 학생을 구분해서 목록으로 표시. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT7e15b61 -
fix: row_ip NameError 수정 (교사 IP 표시용 변수 복원)
ClaudeUnverified signature자기공감 차단 로직에서 row_ip 제거 시 교사 IP 표시 코드에서 참조하던 변수가 함께 제거되어 NameError 발생. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT585f810 -
feat: 입장 변화 현황에 찬성/반대 학생 이름 목록 표시
ClaudeUnverified signature파이 차트 아래에 각 입장을 선택한 학생 이름 목록 추가. 토론 전/후 각각 찬성(명), 반대(명) 확인 가능. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT822b4d6 -
fix: 자기공감 차단 IP → student_name 기반으로 변경
ClaudeUnverified signature학교 NAT 환경에서 모든 학생이 동일 공인 IP를 공유, IP 비교 방식이 반 전체 좋아요를 차단하는 문제 수정. student_name 비교로 변경하여 정확한 셀프 공감 차단. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT411b8aa
-
chore: 임시 IP 디버그 패널 제거
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTbdb2f99 -
fix: opinion_change, chat_board도 anonymize_ip() 적용 (IPv6 지원)
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT526b384 -
fix: IPv6 IP 익명화 지원 추가 (anonymize_ip 공통 함수)
ClaudeUnverified signatureIPv4만 처리하던 익명화 로직을 IPv6도 지원하도록 개선. utils.py에 anonymize_ip() 공통 함수 추가, app.py, opinion_change.py에서 해당 함수 사용. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT02c069f -
debug: 교사 대시보드에 IP/헤더 디버그 패널 임시 추가
ClaudeUnverified signatureStreamlit 버전, 수신된 헤더 목록, 감지된 IP를 교사 대시보드에 표시. IP 저장 안 되는 원인 확인 후 제거 예정. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT3199b80 -
fix: IP: None 표시 버그 수정 (None → 빈 문자열 처리)
ClaudeUnverified signatureip_address가 DB에 NULL일 때 str(None)='None' (truthy)이 되어 교사 화면에 'IP: None'이 표시되던 버그 수정. str(row.get('ip_address') or '').strip() 으로 None을 빈 문자열로 변환. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT57d3393 -
feat: 실시간 의견 통계 숨기기/보이기 토글 (기본값: 숨김)
ClaudeUnverified signatureexpander로 감싸 기본적으로 통계가 숨겨진 상태로 시작 학생이 의견에 영향받지 않고 자유롭게 발언할 수 있도록 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTf9bee66 -
fix: AI 피드백 카드 파싱 수정 + 이미지 다운로드에 피드백 포함
ClaudeUnverified signature- 정규식 수정: 콜론 이후 같은 줄 내용을 올바르게 캡처 - create_analysis_image에 ai_feedback 파라미터 추가 - 이미지 다운로드 시 잘한 점/발전할 점 내용 포함 - 교사 대시보드 이미지 다운로드도 동일하게 적용 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT32b1d82 -
fix: 유효성 검사 오류 메시지에서 영문 에러코드 제거
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTe109735 -
fix: 피드백 버튼 - 실패 시 rerun 안 하도록 수정 (경고 메시지 유지)
ClaudeUnverified signature성공 시만 st.rerun() 호출 → 발언 없을 때 경고 메시지가 사라지지 않음 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT4d38456 -
feat: AI 피드백 카드 수동 생성 버튼 추가
ClaudeUnverified signature- 이미 생각 변화를 제출한 학생도 '🌟 AI 피드백 카드 받기' 버튼으로 재생성 가능 - _trigger_feedback_only() 단독 피드백 생성 함수 추가 - _get_debate_history() 공통 함수로 발언 조회 중복 제거 - 발언 기록 없으면 버튼 클릭 시 경고 메시지 표시 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTd30d457 -
fix: 발언 없을 때 피드백 fallback 메시지 DB 저장 방지
ClaudeUnverified signature- 발언 기록이 없는 학생은 피드백 AI 호출 자체를 건너뜀 - AI가 fallback 메시지 반환 시에도 DB 저장 안 함 - 결과: ai_feedback NULL → 피드백 카드 미표시 (빈 카드 대신) DB 기존 잘못된 데이터 정리 SQL: UPDATE opinion_changes SET ai_feedback = NULL WHERE ai_feedback = '발언 기록이 부족하여 분석이 어렵습니다.'; https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTa6a874c -
fix: AI 피드백 카드 파싱 로직 개선 (정규식 기반)
ClaudeUnverified signature기존 단순 prefix 매칭이 AI 출력 형식 변화에 취약해 (분석 중...) 표시 - 정규식으로 잘한 점/발전할 점 섹션 추출 (이모지/마크다운 무관) - 파싱 완전 실패 시 원문 표시 - render_feedback_card() 공통 함수로 중복 코드 제거 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTa420faa -
fix: IP 익명화 형식 X.X. → 0.0. 으로 수정 (inet 타입 호환)
ClaudeUnverified signatureinet 컬럼에 165.X.X.41 형식 저장 시 invalid syntax 오류 발생 → 165.0.0.41 형식으로 변경 (유효한 inet 형식) 교사 화면 표시는 teacher_dashboard.py에서 .0.0. → .X.X. 변환하여 유지 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTb1e8bd4 -
feat: AI 피드백 카드 (Work Item 5)
ClaudeUnverified signature- opinion_changes.ai_feedback 컬럼 스키마 체크 추가 - save_opinion_feedback() DB 함수 추가 - build_feedback_prompt() AI 프롬프트 추가 (잘한 점 / 발전할 점) - 생각 변화 제출 시 배움 분석 + 피드백 카드 동시 생성 - 학생 화면: 토론 후 피드백 카드 2단 컬럼 표시 (✅ 잘한 점 / 🌱 발전할 점) - 교사 대시보드: 학생별 배움 분석에 피드백 카드 함께 표시 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTb04c6ca -
fix: 발언 깊이 산점도에 전체 선택/해제 버튼 추가 (Plotly updatemenus)
ClaudeUnverified signature- multiselect 필터 제거 - 차트 상단에 '전체 선택' / '전체 해제' 버튼 직접 삽입 - 범례 클릭: 개별 토글, 더블클릭: 해당 학생만 표시 안내 문구 추가 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT38d91d0 -
feat: 발언 깊이 분석 학생 필터 (전체 선택/해제 버튼)
ClaudeUnverified signature- 전체 선택 / 전체 해제 버튼 추가 - multiselect로 개별 학생 선택 가능 - 선택된 학생만 차트 및 테이블에 반영 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT45cae6a -
refactor: 활동 데이터 다운로드를 위험 구역 바로 위로 이동
ClaudeUnverified signature1. AI 토의 촉진 2. 토론 진행 제어 3. 수업 종료 및 전체 토의 요약 리포트 4. 학생 참여도 현황 / 학생별 배움 분석 / 발언 깊이 분석 5. 활동 데이터 다운로드 6. 위험 구역 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT603abfd -
refactor: 교사 대시보드 섹션 순서 재정렬
ClaudeUnverified signature1. AI 토의 촉진 2. 토론 진행 제어 3. 수업 종료 및 전체 토의 요약 리포트 4. 학생 참여도 현황 (+ 학생별 배움 분석, 발언 깊이 분석) https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT04f6e76 -
fix: 발언 깊이 분석 완료 후 상태 갱신 (st.rerun 추가)
ClaudeUnverified signature분석 완료 후 이전 렌더링 기준으로 '미분류' 표시되는 문제 수정 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTd03db2c -
feat: 발언 깊이 분석 (Work Item 4)
ClaudeUnverified signature- debate 테이블 depth_level 컬럼 스키마 체크 추가 (depth_level_available) - fetch_opinions_for_depth, bulk_update_depth_levels DB 함수 추가 - AI 배치 분류 프롬프트/파서 (build_depth_analysis_prompt, parse_depth_levels) 추가 - components/depth_analysis.py 신규 생성 - 분석 실행/재분석 버튼 (교사가 원할 때만 AI 호출) - 발언 깊이 분포 막대 차트 - 시간 흐름에 따른 발언 깊이 산점도 - 학생별 평균 발언 깊이 테이블 (ProgressColumn) - teacher_dashboard.py에 render_depth_analysis_section 통합 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT3489362
-
fix: 공감 쿨다운 중 취소는 즉시 가능하도록 수정
ClaudeUnverified signature새 공감은 3초 쿨다운, 이미 공감한 의견 취소는 쿨다운 무시 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT2630ccf -
fix: 공감 동점 시 같은 등수 뱃지 + 3초 쿨다운 추가
ClaudeUnverified signature- 같은 공감 수 = 같은 뱃지 (dense rank, 예: 동점 1위 둘 다 🥇) - 공감 클릭 후 3초간 모든 공감 버튼 비활성화 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT05eaacf -
feat: 공감(👍) 버튼 기능 추가
ClaudeUnverified signature- likes 테이블 스키마 체크 및 likes_available() 추가 - fetch_room_likes(), toggle_like() DB 함수 추가 - 메시지 오른쪽에 공감 버튼 표시 (이미 공감 시 primary 스타일) - 공감 수 상위 3개에 🥇🥈🥉 뱃지 표시 - 동일 IP 의견에는 공감 버튼 비활성화(셀프 공감 차단) SQL 필요: CREATE TABLE likes (id bigserial PRIMARY KEY, opinion_id bigint NOT NULL, room_name text NOT NULL, student_name text NOT NULL, created_at timestamptz DEFAULT now(), UNIQUE (opinion_id, student_name)); https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT5aad439
-
fix: 로그아웃 시 _admin_redirected 플래그 초기화
ClaudeUnverified signature로그아웃 후 재로그인 시 pending 계정 여부를 다시 확인하지 않는 버그 수정 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTbf2236f -
fix: 로그인 실패 시 DB 프로젝트 ref 디버그 표시 제거
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTf049499 -
fix: admin 로그인 첫 화면 분기 수정 — pending 없으면 대기실로 올바르게 이동
ClaudeUnverified signaturejoined=True 상태에서는 로비가 안 열리므로 pending 없을 때 joined=False 유지, _admin_redirected 플래그로 AUTO_JOIN_ON_REFRESH 무한루프 방지, 방 나가기/방 전환/모드 전환 시 플래그 초기화 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT2eb4389 -
feat: 주제 수정을 상단으로 이동 + admin 첫 화면 자동 분기
ClaudeUnverified signature- 주제 수정 expander를 현재 주제 바 바로 아래로 이동 (교사만 표시) - admin 로그인 시 pending ID 요청이 있으면 ID 요청수락, 없으면 대기실로 자동 이동 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT096e84c -
feat: 교사가 방 입장 후 토론 주제를 수정할 수 있는 기능 추가
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTa79721f
-
fix: 삭제 버튼 오른쪽 끝 정렬 (use_container_width=True)
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTeff863c -
fix: 삭제 버튼 selectbox 우측 정렬 + 학생 목록 10초 자동 갱신
ClaudeUnverified signature- selectbox와 삭제 버튼을 같은 행 [6,1] 컬럼으로 배치 - _render_oc_section을 @st.fragment(run_every=10)으로 분리 → 신규 학생 pre-opinion 제출 시 10초 내 교사 목록 자동 반영 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTc87a729 -
fix: pandas NaN float로 인한 AttributeError 수정
ClaudeUnverified signatureDataFrame에서 읽은 값이 NaN(float)일 때 or ""로 처리 안 되는 문제. NaN은 truthy라 or 연산을 통과하므로 pd.isna() 체크로 안전하게 변환. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT52d6935 -
fix: 학생별 배움 분석 IP 표시 — opinion_changes에 ip_address 저장
ClaudeUnverified signaturedebate 메시지 없이 opinions만 제출한 학생도 IP가 표시되도록 pre-opinion 제출 시 IP를 opinion_changes에 함께 저장. 교사 대시보드는 opinion_changes 행에서 IP를 우선 읽고 없을 경우 debate 메시지에서 fallback. DB 마이그레이션 필요: ALTER TABLE opinion_changes ADD COLUMN IF NOT EXISTS ip_address text; https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTffefbd1 -
fix: 토의 종료 안내 문구 조사 오류 수정 (토의이→토의가)
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTe5924fc -
feat: 교사 배움 분석 학생 기록 삭제 + IP A.X.X.D 포맷 표시
ClaudeUnverified signature- 교사 대시보드 학생별 배움 분석에 삭제 버튼 + 2단계 확인 추가 - 학생 IP를 A.X.X.D 형태로 표시 (기존 A.0.0.D도 변환) - IP 저장 포맷도 A.X.X.D로 통일 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT324c055 -
fix: 결론 워드클라우드 크기 절반(1/2)으로 조정
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTcd564c0 -
fix: 결론 워드클라우드 크기 화면의 1/4로 축소
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT71fa7c2