a7b3164f78
이전 fix(effect→onchange)에도 race 재발 (id 306,307 qnum=1,2 로 또 들어감). 근본 해결 — 클라이언트의 f_qnum 표시값과 실제 저장값을 분리. 변경: - f_qnum_user_edited dirty flag 추가 - input 에 oninput → user_edited=true (사용자가 직접 박스 수정한 경우) - onMount fallback / onRoundChange / applyNewRound / 저장 후 → user_edited=false - POST body 의 exam_question_number: user_edited=true 면 명시 전송, false 면 null → 서버가 같은 회차 max+1 자동 채움 (PR-6 의 기존 서버 로직) - POST 응답의 실제 저장 qnum 으로 화면 동기화 (saved.exam_question_number) → 표시값이 어긋났어도 저장 후 정확하게 갱신 - applyNewRound 에서 이미 존재하는 회차명 입력 시 next_question_number 적용 (사용자가 dropdown 대신 새 회차 모드로 같은 이름 다시 입력해도 1번부터 다시 시작 X) 이제 클라이언트가 어떤 표시값을 보여주든 실제 저장은 항상 정확. 사용자가 직접 박스를 수정한 경우만 명시 전송.