POSA_Copyrighter/web/operator-gui
changukyu e169e24584 feat: 반려 키보드 완결 — 가장 중요한 경로가 가장 느렸다
승인·보류는 A/H 한 키에 자동 다음 케이스 이동까지 되는데 반려만 메모가
필수라 흐름이 끊겼다. R 은 메모 필드에 포커스만 줬고, 입력 중에는 전역
단축키가 막히므로(J/K 가 글자로 들어가면 안 되니 의도된 동작) 거기서부터는
마우스로만 제출할 수 있었다. 저작권 심사에서 법적으로 가장 중요한 판정이
가장 느린 경로였다.

  R        사유 선택 모드 (프리셋에 1~9 번호가 보인다)
  1~9      그 사유로 즉시 반려 + 다음 미심사 케이스로
  M        직접 입력으로 전환
  Esc      취소
  메모 안에서 Ctrl+Enter   자유 서술 반려 제출

화면의 번호가 곧 눌러야 할 키다. 프리셋 칩에 키 배지를 붙여 단축키를 외우지
않아도 되게 했다.

숫자는 사유 선택 모드 안에서만 의미를 갖는다. 모드 밖에서 숫자에 의미를 주면
잘못 누른 키 하나로 반려가 나간다 — 되돌릴 수 있는 동작이지만 주의목록 항목을
만들고 감사에 남으므로 사고로 일어나서는 안 된다. 가드가 숫자 분기보다 먼저
오는지를 테스트가 위치로 확인한다.

프리셋이 하나도 없으면 고를 것이 없으므로 모드를 열지 않고 예전처럼 메모
필드로 보낸다.

실렌더(Playwright 1440x900, 실제 서버 + 부트스트랩 스텁):
  R -> 2      {"decision":"rejected","memo":"라이선스 확인 불가로 반려"}
  메모 + Ctrl+Enter  {"decision":"rejected","memo":"자유 서술 사유"}
콘솔 에러 0.

검증: ruff clean, pytest 645 passed (정적 3건 추가).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BStHFrjQj2VypecSG9ex1V
2026-09-21 18:41:22 +09:00
..
assets fix: resolve code-review findings from the clean-review restyle 2026-06-11 11:13:46 +09:00
pitch-assets chore: initial commit of copyrighter (rights_filter) 2026-06-09 09:50:31 +09:00
app-admin.js feat: 증거 일괄 표시 — 51번 클릭하던 되먹임을 1번으로 2026-09-21 14:34:05 +09:00
app-api.js refactor: app.js 5,428줄을 관심사별 app-*.js 15개로 분할 2026-08-08 09:48:52 +09:00
app-bootstrap.js feat: 반려 키보드 완결 — 가장 중요한 경로가 가장 느렸다 2026-09-21 18:41:22 +09:00
app-collections.js refactor: app.js 5,428줄을 관심사별 app-*.js 15개로 분할 2026-08-08 09:48:52 +09:00
app-decision-tools.js feat: 반려 키보드 완결 — 가장 중요한 경로가 가장 느렸다 2026-09-21 18:41:22 +09:00
app-format.js fix: 증거 행 레이아웃·호스트 노출·보존 케이스 설명, 프롬프트 스탬프 갱신 2026-09-18 23:54:00 +09:00
app-keyboard-batch.js feat: 반려 키보드 완결 — 가장 중요한 경로가 가장 느렸다 2026-09-21 18:41:22 +09:00
app-navigation.js feat: 선례 승계 — 재제출을 다시 심사하지 않는다 2026-09-21 12:05:38 +09:00
app-render-evidence.js feat: 점수 구성 패널 — "증거 51개인데 왜 35점"에 답한다 2026-09-21 18:07:08 +09:00
app-render-panels.js refactor: app.js 5,428줄을 관심사별 app-*.js 15개로 분할 2026-08-08 09:48:52 +09:00
app-render-queue.js feat: 점수 구성 패널 — "증거 51개인데 왜 35점"에 답한다 2026-09-21 18:07:08 +09:00
app-selectors.js feat: 선례 승계 — 재제출을 다시 심사하지 않는다 2026-09-21 12:05:38 +09:00
app-state.js refactor: app.js 5,428줄을 관심사별 app-*.js 15개로 분할 2026-08-08 09:48:52 +09:00
app-stats.js refactor: app.js 5,428줄을 관심사별 app-*.js 15개로 분할 2026-08-08 09:48:52 +09:00
app-submissions.js refactor: app.js 5,428줄을 관심사별 app-*.js 15개로 분할 2026-08-08 09:48:52 +09:00
evidence-guidance.js chore: initial commit of copyrighter (rights_filter) 2026-06-09 09:50:31 +09:00
index.html feat: 반려 키보드 완결 — 가장 중요한 경로가 가장 느렸다 2026-09-21 18:41:22 +09:00
operator-labels.js feat: 신뢰 출처 — 자사·계약처 도메인은 위험 신호가 아니다 (SCORER_VERSION v4) 2026-09-21 12:18:31 +09:00
operator-search.js feat: expose google_search as operator manual text-query provider 2026-06-12 17:46:45 +09:00
pitch.css chore: initial commit of copyrighter (rights_filter) 2026-06-09 09:50:31 +09:00
pitch.html chore: initial commit of copyrighter (rights_filter) 2026-06-09 09:50:31 +09:00
pitch.js chore: initial commit of copyrighter (rights_filter) 2026-06-09 09:50:31 +09:00
styles.css feat: 반려 키보드 완결 — 가장 중요한 경로가 가장 느렸다 2026-09-21 18:41:22 +09:00
submission-import.js chore: initial commit of copyrighter (rights_filter) 2026-06-09 09:50:31 +09:00