# 런타임 흐름 ## 정상 입력 시나리오 1. 애플리케이션이 `#user-input`에 포커스를 둔다. 2. 사용자가 입력하고 Enter를 누른다. 3. `Input.Submitted` 이벤트에서 입력값을 `strip()`한다. 4. 입력창 값을 즉시 빈 문자열로 초기화한다. 5. `trim` 결과가 유효하면 사용자 메시지를 세션 상태에 기록한다. 6. `random.choice(RESPONSE_MESSAGES)`가 고정 응답 하나를 선택한다. 7. 선택 응답을 세션 상태에 기록한다. 8. 대화 영역에 사용자 메시지 `Label`을 추가한다. 9. 사용자 메시지 바로 뒤에 응답 `Label`을 추가한다. 10. 대화 영역을 마지막 항목으로 스크롤한다. 여러 번 제출하면 각 사용자 메시지와 응답 쌍이 제출 순서대로 누적된다. ## 공백 입력 시나리오 1. 사용자가 공백만 포함한 값을 제출한다. 2. 입력값을 `strip()`한다. 3. 결과가 빈 문자열임을 확인한다. 4. 입력창은 비우되 상태, 난수 선택 결과 및 대화 영역은 변경하지 않는다. ## 종료 시나리오 - `Escape`를 누르면 기존 종료 바인딩이 실행된다. - `Ctrl+Q`를 누르면 기존 종료 바인딩이 실행된다. - 두 동작 모두 `quit` 액션을 통해 애플리케이션 종료를 요청한다. ## 검증 시나리오 자동 테스트는 결정 가능한 `random.choice` 결과를 사용해 다음을 확인한다. - 입력 `trim` 결과가 사용자 메시지로 저장되고 표시되는지 - 사용자 메시지 다음에 응답이 표시되는지 - 공백 입력에서 `random.choice`가 호출되지 않는지 - 입력창이 제출 후 비워지는지 - 기존 종료 동작이 유지되는지