Spaces:
Runtime error
Runtime error
Commit History
-
fix: HCI 개선 1~4 — 에러코드 노출, 방 자동선택, 빈방 fallback, 토론상태 표시
ClaudeUnverified signature1. 에러 코드 노출 제거: 사이드바 방 개설 에러에서 내부 코드(VALIDATION_*) 숨김 2. 방 생성 후 자동 선택: 개설 즉시 캐시 초기화 후 새 방으로 자동 이동 3. 교사 방 없을 때 fallback: '기존 방 선택' 시 방이 없으면 안내 메시지 표시 4. 학생 토론 상태 배너: 진행 중/종료 여부를 항상 배너로 명시 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT9dcf3c3
-
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
-
fix: _poll_debate_status에서 st.rerun(scope='app') 적용
ClaudeUnverified signatureStreamlit 1.37+에서 fragment 내 st.rerun()은 fragment만 재실행. scope='app'으로 전체 앱 재실행해야 학생 화면이 즉시 갱신됨. 수정되는 버그: - 교사 토론 재개 후 학생이 F5 없이 의견 제출 가능 - 교사 재개 → 학생 의견 제출 → 교사 재종료 시 학생 화면 즉시 반영 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTabcc046 -
fix: IPv6 IP 익명화 지원 추가 (anonymize_ip 공통 함수)
ClaudeUnverified signatureIPv4만 처리하던 익명화 로직을 IPv6도 지원하도록 개선. utils.py에 anonymize_ip() 공통 함수 추가, app.py, opinion_change.py에서 해당 함수 사용. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT02c069f -
fix: 유효성 검사 오류 메시지에서 영문 에러코드 제거
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTe109735 -
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
-
fix: admin 첫 화면 분기 로직을 app.py 상단으로 이동
ClaudeUnverified signaturerender_admin_page의 st.stop()이 lobby.py 내 redirect 로직 실행을 막는 버그 수정. sidebar 이후, 페이지 체크 이전에 pending 여부 확인하여 첫 화면 결정. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT9395c32 -
feat: 주제 수정을 상단으로 이동 + admin 첫 화면 자동 분기
ClaudeUnverified signature- 주제 수정 expander를 현재 주제 바 바로 아래로 이동 (교사만 표시) - admin 로그인 시 pending ID 요청이 있으면 ID 요청수락, 없으면 대기실로 자동 이동 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT096e84c
-
fix: 토론 종료 후 신규 접속 학생의 post-opinion 접근 차단
ClaudeUnverified signaturepre-opinion 없이 토론 종료 상태로 입장하면 참여 불가 안내만 표시. 토론 전 생각을 미리 제출한 학생만 토론 후 생각을 작성 가능. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT78687ed -
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: 교사 토론 종료 시 학생 화면 자동 반영 — 3초 폴링 fragment 추가
ClaudeUnverified signaturefetch_debate_status 캐시가 만료돼도 학생 페이지가 rerun되지 않아 종료 상태가 반영 안 되는 문제 수정. @st.fragment(run_every=3)으로 3초마다 상태 확인 후 변경 시 전체 rerun. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTbdf2fff -
feat: 작업 2 - 최종 입장 표현 구현
ClaudeUnverified signature[토론] 토론 전 초기 입장(찬성/반대/중립) 선택 UI 추가 [토론] 토론 후 최종 입장 투표 UI 추가 [토론] 교사 대시보드 전후 입장 변화율 도넛 차트 시각화 [토의] 토의 종료 후 '가장 중요한 결론은?' 한 줄 입력 UI 추가 [토의] 교사 대시보드 결론 워드클라우드 시각화 DB: opinion_changes에 initial_stance, final_stance, discussion_conclusion 컬럼 추가 필요 (SQL 별도 안내) https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT1f31eaa
-
feat: 토론 전후 생각 변화 기록 기능 추가 (Sprint 3 작업 1)
ClaudeUnverified signature- 학생은 토론 전 생각을 먼저 제출해야 의견 입력창 활성화 - 교사가 '토론 종료' 클릭 시 학생 화면이 '생각 변화 입력' 폼으로 전환 - 학생이 토론 후 생각 제출 시 AI가 전후 비교 분석 자동 생성 - 새 DB 테이블 opinion_changes, session_control 필요 (SQL 안내 별도) https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT5c3354b
-
feat: 교사 세특 작성 영역 전체 제거
ClaudeUnverified signature연구대회 학생 배움 중심 스프린트 방향에 따라 세특 기능 제외. AI 세특 초안 생성 UI, 세특 보관함, 관련 DB 쿼리, 프롬프트 빌더, session_state, CSS를 모두 삭제. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT10d9001
-
fix: 제출 섹션을 @st .fragment로 분리 — 쿨다운 rerun이 하단 콘텐츠 숨기는 문제 해결
ClaudeUnverified signaturest.rerun()이 프래그먼트 밖 렌더링을 중단시켜 채팅 보드 등 하단 콘텐츠가 사라지던 문제를 수정합니다. 입력 섹션을 @st.fragment로 감싸 쿨다운 rerun이 해당 영역만 재실행하도록 하고, 제출 성공 시에는 scope="app"으로 전체 앱을 새로고침합니다. https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv78dbc191 -
fix: 버튼 다중 클릭 방지 — is_working 플래그 + 0.5초 단위 sleep
ClaudeUnverified signature- is_working 플래그로 제출 처리 중 재진입 차단 - time.sleep(3-elapsed) → time.sleep(0.5)로 변경해 블로킹 창을 최소화, 큐에 쌓인 클릭이 한꺼번에 발사되는 현상 방지 https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv71f7e056 -
fix: 제출 쿨다운 후 버튼 자동 복구 (sleep + st.rerun)
ClaudeUnverified signatureStreamlit은 자동 리렌더링이 없어 3초 후에도 버튼이 비활성 상태로 남아 있는 문제를 수정합니다. 쿨다운 중일 때 남은 시간만큼 sleep 후 st.rerun()을 호출해 버튼이 정확히 3초 뒤 활성화됩니다. https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv7ff2c988 -
fix: IP 익명화 — 첫 번째·마지막 옥텟만 유지 (x.0.0.x)
ClaudeUnverified signature중간 두 자리를 0으로 마스킹하고 첫 번째와 마지막 옥텟만 노출합니다. https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv768f6942 -
fix: IP 익명화 강화 — 첫 번째 옥텟만 유지 (x.0.0.0)
ClaudeUnverified signature중간 2자리 노출 방지를 위해 마지막 옥텟만 마스킹하던 방식에서 두 번째·세 번째 옥텟도 0으로 치환하는 방식으로 변경합니다. https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv7058ccd7 -
제출 성공 후 3초 쿨다운 안내 문구 추가
ClaudeUnverified signature의견 제출 버튼이 비활성화된 동안 버튼 아래에 "⏳ 제출 성공 후 3초간 의견을 제출할 수 없습니다." 안내 문구를 표시합니다. https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv75448f7f -
fix: 제출 버튼 3초 비활성화로 Rate Limiting 단순화
ClaudeUnverified signatureDB 쿼리 방식 제거, session_state + disabled 파라미터로 교체. 제출 성공 후 3초간 버튼이 회색으로 비활성화됨. name 'time' is not defined 오류도 함께 수정. https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv7bf6465c -
fix: Rate Limiting을 DB 기반 서버사이드 체크로 교체
ClaudeUnverified signaturesession_state 방식은 페이지 새로고침·탭 전환 시 초기화되어 우회 가능. DB에서 동일 학생의 15초 이내 최근 제출 여부를 직접 확인하는 방식으로 변경. (is_recent_submission 함수 신설 — debate 테이블에 gte 쿼리) https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv7018c37f -
fix: IP 익명화 방식 수정 (inet 타입 호환)
ClaudeUnverified signatureDB ip_address 컬럼이 PostgreSQL inet 타입이므로 hex 해시 저장 불가. SHA-256 해시 대신 마지막 옥텟을 0으로 대체하는 방식으로 변경. (예: 1.2.3.4 → 1.2.3.0) — inet 형식 유지하면서 개인 식별 불가. IPv6는 저장하지 않음. https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv73feaea0 -
fix: 코드 리뷰 지적사항 8건 수정
ClaudeUnverified signature[🔴 심각] - env.py 신설: _get_secret → get_secret 공개 API로 전환 db.py, config.py, teacher_auth.py, teacher_dashboard.py 임포트 일괄 정리 - app.py: 의견 제출 Rate Limiting 추가 (10초 제한) [🟡 경고] - validators.py: validate_opinion_content에 allowed_pattern=None 적용 (특수문자·이모지 허용, 길이만 체크) - validators.py: _validate_text_field 길이 체크를 truncate 이전에 수행 (TOO_LONG 오류가 절대 발생하지 않던 버그 수정) - utils.py: get_kst_now()를 timezone-aware KST datetime 반환으로 변경 - app.py: DB 저장 전 IP를 SHA-256 해시(16자)로 처리 [🔵 개선] - tests/ 신설: validators, utils 단위 테스트 24개 (pytest) - CI에 test job 추가 - teacher_dashboard.py를 hint/summary/records 3개 컴포넌트로 분리 - wordcloud.py: max_words 75→40으로 축소 (O(n²) 성능 개선) - utils.py: compact_ai_report_output 이중 치환 버그 → 정규식으로 수정 https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv744ebedd
-
refactor: 불필요한 파일 통폐합 및 관심사 분리
ClaudeUnverified signature- components/__init__.py, views/__init__.py (빈 파일) 삭제 - services/prompts.py → services/ai.py 병합 (항상 함께 사용되는 프롬프트 빌더) - auth.py 신설: 비밀번호 해시/검증 함수를 db.py에서 분리 - components/teacher_auth.py 신설: 교사 로그인·회원가입·로그아웃 UI를 sidebar.py에서 추출 (242줄 → 110줄) - views/admin.py → components/admin_panel.py 이동 (컴포넌트 성격에 맞게 재배치) - 관련 임포트 경로 일괄 업데이트 https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv78673167
-
Fix: 홈 화면 초기 로딩 속도 개선 — 무거운 임포트 지연
ClaudeUnverified signatureplotly, google.generativeai 임포트를 홈 화면(st.stop()) 이후로 이동해 콜드 스타트 시 첫 화면 렌더링 속도를 크게 개선 https://claude.ai/code/session_01Q3iYL9HzBCznNPUTHLZLnq85d74ac -
Fix: 초기 화면 로딩 속도 회복 - check_schema_columns 선제 호출 제거
ClaudeUnverified signatureapp.py 상단의 check_schema_columns() 선제 호출이 DB 쿼리 5개를 화면 렌더링 전에 블로킹하여 초기 화면이 15초 걸리는 회귀 유발. lazy 호출(사이드바 렌더링 시 필요할 때)로 복원하여 2~3초 복구. https://claude.ai/code/session_01Q3iYL9HzBCznNPUTHLZLnq5e0df16 -
Fix: service_role 키 사용 시 불필요한 auth 로그인 건너뜀
ClaudeUnverified signatureensure_db_login은 anon 키 + RLS 우회용으로만 필요한 함수인데 service_role 키 환경에서도 매 rerun마다 실행되어 auth API 네트워크 호출이 발생, 초기 로딩 지연의 주요 원인이었음 https://claude.ai/code/session_01Q3iYL9HzBCznNPUTHLZLnq23fafdc -
Fix: 대기실 이동 시 Running 스피너 지연 개선
ClaudeUnverified signaturecache_resource → cache_data(ttl=3600) 복원 (cache_data 내부에서 cache_resource 호출 시 Streamlit 성능 저하 문제 해결) app.py 초기화 시점에 check_schema_columns()를 미리 호출해 이후 사이드바/대기실 렌더링 시 DB 쿼리 없이 캐시 즉시 반환 https://claude.ai/code/session_01Q3iYL9HzBCznNPUTHLZLnq01c34b8 -
Fix: 방 입장 후에도 관리자 바로가기 버튼 유지
ClaudeUnverified signaturehttps://claude.ai/code/session_01VubVHht1kvabfdfFR1weKsf327ff5
-
Fix: 의견 제출/삭제/힌트 전송 후 캐시 즉시 무효화
ClaudeUnverified signaturesubmit_opinion, delete_opinion_message, create_teacher_hint 성공 시 fetch_live_messages.clear() 호출 → 다음 렌더에서 즉시 최신 데이터 반영 https://claude.ai/code/session_018WXW8M8SMsWcHtj1RynUi49d7fd67 -
Fix: 미사용 import 제거, fetch_live_messages 이중 DB 호출 캐싱
ClaudeUnverified signature- app.py: normalize_user_text 미사용 import 제거 - db.py: fetch_live_messages에 @st.cache_data(ttl=5) 추가 교사 대시보드+채팅보드 이중 호출 → 5초 캐시로 1회만 쿼리 https://claude.ai/code/session_018WXW8M8SMsWcHtj1RynUi409bd939
-
Fix: pages/ → views/ to prevent Streamlit multi-page auto-routing
ClaudeUnverified signaturehttps://claude.ai/code/session_018WXW8M8SMsWcHtj1RynUi469b8ae1 -
Refactor: split app.py into pages/ and components/ modules
ClaudeUnverified signature- config.py: all constants, feature flags, and CSS - pages/home.py, lobby.py, admin.py: full-page views - components/sidebar.py: teacher login/signup + student room selection - components/chat_board.py: live message board with auto-refresh fragment - components/teacher_dashboard.py: AI hints, summary reports, 세특 drafts - app.py rewritten as lean orchestrator (~160 lines) https://claude.ai/code/session_018WXW8M8SMsWcHtj1RynUi43bb2388
-
Update app.py
Unverified signature3661e41 -
Update app.py
Unverified signatureb1b73b8 -
Update app.py
Unverified signature9b5c192 -
Update app.py
Unverified signature87acb97
-
Update app.py
Unverified signatureeaba3e2 -
Update app.py
Unverified signaturefe15e44 -
Update app.py
Unverified signaturedbedccd -
Update app.py
Unverified signature02280f4 -
Update app.py
Unverified signature3ff3da2
-
Update app.py
Unverified signaturebe09964 -
Update app.py
Unverified signaturef77f00d -
Update app.py
Unverified signature349f165
-
Update app.py
Unverified signaturebaf57bd -
Update app.py
Unverified signature3d4a8d5 -
Update app.py
Unverified signatured7bac00 -
Update app.py
Unverified signaturea2795da