Repository navigation
feat: 빈 입력창 화면 판정 제거, 사람 보호는 최근 키 입력(30초)으로 통일 - #182
Merged
Merged
Conversation
실행기 업데이트로 화면 모양이 바뀌면 checkEmptyInput이 빈 입력창을 미제출 글로 오판해 발령과 알림이 통째로 막혔다(devin·claude 9-23, herdr 폭 10-11, codex 0.163 10-17). tmux는 카드·알림·일반 우편이 같은 client_activity 30초 검사 하나를 쓰고, herdr는 화면 판정과 inputFrame을 지웠다. 받아들인 손해: 30초 넘게 손을 뗀 쓰던 글 뒤에 우편이 붙을 수 있다. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
tmux는 client가 붙는 순간 client_activity를 client_created와 같게 두고 키 입력으로만 갱신한다 (격리 소켓 실측). 활동이 붙은 시각보다 1초 넘게 뒤일 때만 사람 입력으로 센다. 로티 탭이 시작과 동시에 붙어도 첫 안내와 발령이 막히지 않는다. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…-input-check # Conflicts: # docs/flows.md
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
초 단위 값에서 activity - created > 1 규칙은 붙은 뒤 약 1.25초에 친 문장을 놓쳤다(검수 P2). 활동이 붙은 시각보다 뒤이면(차이 1초 이상) 사람 입력으로 센다. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
실행기 업데이트로 화면 모양이 바뀌면
checkEmptyInput(프롬프트·자리표시자·테두리·바닥글 모양 판정)이 빈 입력창을 "안 보낸 글"로 오판해 발령과 알림이 통째로 막혔다(devin·claude 9-23, herdr 폭 10-11, codex 0.163 10-17 #180). kyle 결정(슈퍼감독 우편 b01a931e): 사람 글에 우편이 가끔 붙는 것보다 발령이 막히는 쪽이 더 치명적이므로 화면 판정을 없애고, 사람 보호는 그 창에 붙은 사람이 30초 안에 키를 눌렀는가(tmuxclient_activity) 하나로 통일한다.받아들인 손해 (분명히)
client_activity > client_created(초 단위, 차이 1초 이상)로 센다. 붙기·크기 바꾸기·paste-buffer·send-keys는 활동 값을 바꾸지 않아(격리 tmux 실측) 붙기만 한 창은 입력이 아니다. 한계 둘: (1) 붙은 바로 그 초 안에 친 키는 놓친다. (2) 붙은 뒤 터미널 응답 같은 입력이 다음 초에 들어와 활동이 바뀌면 그 창은 30초 보류된다. 막히는 것은 start 첫 안내뿐이고 start는 성공하며 발령은 30초 뒤에 간다.변경
checkHumanIdle하나를 카드(checkCardPane)·알림(checkNotificationPane)·일반 우편(sendTmux기본 경로)이 같이 쓴다. 붙여넣기 전·후 두 번 본다. 숫자 아닌 값KADAN_HUMAN_ACTIVITY_UNKNOWN(실패 닫힘), client 없음 통과, 우회는force === true뿐. 일반 우편이 막히면not-sent+KADAN_HUMAN_ACTIVE("사람이 이 창에서 최근 입력함 — 잠시 뒤 다시 보내라"), 새 대기열 없음(peer 우편의peerStore()보관은 그대로).checkPaneMode,pane_dead, PID 대조,matchesAiProcess,sendTmuxEnter의 모드 검사. 화면 판정에만 쓰던cursor_y·cursor_x·pane_width조회 제거.checkEmptyInput(export 포함),PROMPT_LINE,EMPTY_INPUT_PLACEHOLDERS,CLAUDE_PLACEHOLDER,ANSI,allDimAfterPrompt,isInputRule,CODEX_HINT_PART·isCodexHintLine(fix: codex 0.163 두 줄 바닥글 빈 입력창 인식 #180), herdr의inputFrame·herdrInputFrame·OBSERVE_FRAME. 입력 큐 배너 감지(watch-queued-input등)는 건드리지 않았다.KADAN_PANE_INPUT_PENDING/UNKNOWN은 옛 기록 표시용으로notification-guard.mjs·dashboard-band.mjs에 주석과 함께 남김.herdr 방침: (b) 카드·일반 우편은 사람 검사 없이 보낸다
(a) "화면 30초 안정" 검사는 안정 기록을 프로세스 메모리 맵(
herdrNotificationGuard의quiet)에 둔다. 장수 프로세스인 감시기에서만 의미가 있고,kadan send·dispatch는 호출마다 새 프로세스라 이전 관측을 기억하지 못해 늘 처음 관측으로 보류된다(= 항상 막힘). 그래서 (b). 알림의 30초 안정 검사는 유지. 지문에서frame.row는 뺐다(화면 글이 바뀌면 같이 바뀌어 정보가 늘지 않음).KADAN_HERDR_SCROLLED·agent_status·승인 대기·PID/AI 프로세스 검사는 그대로, 화면truncated면 거절하는 완전성 검사도 유지(KADAN_HERDR_INPUT_UNKNOWN).rottie (코드 읽기만, 실제 로티는 부르지 않음)
src/floor-rottie.mjs의sendRottieText/send(session, text)는cardIdentity·notificationGuard를 받지 않고 입력 보호가 전혀 없다(본문 파일 →terminal send --no-enter→ 출력 대기 → Enter 파일 전송). 바닥에notificationHold도 없어 감시기 보류도 지원하지 않는다. 이 코드가 쓰는 로티 CLI 동사는status/workspace/terminal/recovery이고terminal show/send/wait/read/close/create뿐이며 사람 입력 시각을 주는 호출은 쓰이지 않는다. 로티 CLI 전체 목록은 실제 로티를 부르지 않는 규칙 때문에 확인하지 않았다. 동작 변경 없음.지우거나 다시 쓴 시험
herdr-input-width.test.mjscheckEmptyInput폭 판정 시험herdr-input-scrollback.test.mjsai-identity-send-boundariesKADAN_HUMAN_ACTIVE·not-sent·붙여넣기 0), 60초 전/client 없음 통과, 여러 client, 값 숫자 아님, 화면에 쓰던 글 모양이어도 사람 활동 없으면 전송(capture-pane0회), 알림 기준 시간,force통과, 두 번 검사,notificationHoldclient_activity를 바꾸지 않는다는 전제(실제 tmux도 키 입력만 셈)herdr-floorKADAN_PANE_INPUT_PENDING→KADAN_HUMAN_ACTIVE(화면이 바뀌면 30초 새로)로herdrInputFrame삭제send-bufferrun7곳list-clients가 빈 값을 돌려주도록watch-notify-holdautomatic-review-cliai-identity-boundaries-cli경로별 보호
notificationHold없음)not-sentpeerStore()보관dispatch가 막히면
guardedSend는floor.send가 던지면send/dispatch원장을 쓰기 전에 끝난다(전문 시도였다면send-failed만 남음). 그래서kadan dispatch·work execute --dispatch가KADAN_HUMAN_ACTIVE로 막혀도 실행 카드는assigned로 남고 발령 기록은 없다. 시험 근거:ai-identity-boundaries-cli(dispatch·send 증가 0),automatic-review-cli(auto-step→ exception, 발령 0). 사람이 없는 시간에send --task로 다시 보내면 된다.검증
npm test: pass 1943 / fail 0 (env -u KADAN_ROLE -u KADAN_ROTTIE_BIN KADAN_HOME=$(mktemp -d) KADAN_SOCKET=t-$RANDOM KADAN_WINDOW=none KADAN_NOTIFY=off npm test)npm run check:public: 0 issue머지는 kyle 승인 뒤.
🤖 Generated with Claude Code