작업할 메뉴가 안 보인다고 기능이 사라졌다고 단정할 수는 없다. 기존 탭이 사람 확인 화면으로 이동했을 수 있기 때문이다. 북극성에서는 이 상황을 일반적인 요소 없음 오류로 묻지 않고, 현재 탭에서 사람이 처리해야 할 상태로 구분하는 경로를 만들었다.

사람 확인인지 판단할 때 목적지도 함께 본다

Gemini 경로는 알려진 Google 확인 주소의 정확한 origin과 경로를 확인하고 continue가 가리키는 목적지가 Gemini인지 본다. 확인 화면이라는 모양만으로 어떤 서비스의 문제인지 추정하지 않는다. 다른 사이트를 위한 확인을 현재 Gemini 작업의 인증 문제로 잘못 부르지 않기 위한 조건이다.

이 검사는 확인 절차를 자동 통과시키는 구현이 아니다. 현재 기존 탭에서 직접 처리할 필요를 설명하는 오류를 돌려준다. 메뉴가 없는 경우와 사람이 확인해야 하는 경우의 다음 행동은 다르다. 같은 element-not-found로 끝내면 불필요한 메뉴 탐색이나 새 요청이 이어질 수 있었다.

목록에서 빠진 query를 추측하지 않는다

탭 목록은 개인정보를 줄이기 위해 URL query를 생략한다. 목록에 확인 경로만 보이면 목적지 판단에 필요한 값이 없을 수 있다. 코드는 읽을 수 있는 현재 탭을 명시적으로 선택한 뒤 observe로 실제 주소를 확인한다. 잘린 메타데이터에서 continue 값을 만들어 내지 않는다.

observe를 하기 전에는 그 탭의 사용권을 얻어야 한다. 관련 시험은 selectTab 없이 읽으면 거절되는 소유권 조건도 재현한다. 기존 탭을 확인하는 과정과 새 브라우저·별도 프로필을 만드는 과정은 다르다. 인증 상태를 보려는 읽기가 작업의 연결을 바꾸는 일이 되지 않게 했다.

기다리는 사이 이미 풀린 상태도 다시 읽는다

목록은 확인 화면을 가리켰지만 실제 관찰에서는 원래 서비스로 돌아와 있을 수 있다. 그 경우 같은 탭으로 정상 상태를 읽는다. 오래된 목록 하나를 근거로 계속 사람 확인을 요구하지 않는다. 반대로 실제 목적지가 다른 서비스라면 Gemini 확인 오류로 몰지 않고 대상 탭 선택 문제로 구분한다.

확인 대상과 현재 상태를 다시 읽는 비용은 있지만 잘못된 인계를 줄일 수 있다. 사람에게 이미 처리한 일을 반복하게 만드는 것도 자동화의 실패다. 나는 과거 관찰을 보존하되 현재 사실이 바뀌었으면 그 차이를 읽을 수 있게 하는 쪽을 택했다.

인증 인계 뒤에 요청을 자동 반복하지 않는다

확인 필요 오류는 기존 요청을 재전송하라는 신호가 아니다. 작업 기록에서는 사용자가 확인을 끝낸 뒤 같은 프로젝트·탭·로그인에서 상태를 읽고 재개했다. 이미 첨부된 ZIP이나 불확실한 입력은 원래 결과에서 확인했다. 새 탭이나 인증 복사를 해결책으로 추가하지 않았다.

사람 확인과 한도, 도구 미지원, 준비 시간 초과도 구분해야 한다. 각각 실패하는 조건과 필요한 근거가 다르다. 로그인 화면이 보인다고 서비스 기능 자체가 구현되지 않았다고 쓰거나 프로그램을 다시 설치하는 식으로 원인을 키우지 않는다. 실제로 막힌 경계를 그대로 알려 주는 것이 중요했다.

시험은 인계 전에 조작이 없었는지 확인한다

기존 시험은 query가 생략된 목록에서 현재 탭을 한 번 관찰하고 click·fill·navigate가 없는지 확인한다. 다른 목적지의 확인, 이미 풀린 확인, 선택 후 읽기 순서도 나누어 검사한다. 이번 콘텐츠 작업에서는 해당 코드와 시험을 읽었으며 실제 사람 확인 화면을 조작하지 않았다.

독립 생성 관찰기의 waiting_for_user는 호출자가 선언한 응답 상태다. 이 Google 경로 판별이나 실제 인증 인계를 구현한 모듈은 아니다. 같은 상태 이름을 쓴다고 동작 범위가 같아지는 것은 아니다. 합성 예제와 원래 호스트 경계의 근거를 나눠 소개했다.

에이전트가 편하려면 멈춘 이유도 정확해야 한다

에이전트가 다루기 쉬운 프로그램은 모든 것을 자동으로 넘기는 프로그램이 아니다. 사람이 필요한 순간을 짧고 정확하게 알려 주고, 처리 뒤 원래 일을 어디에서 이어 볼지 남기는 프로그램이어야 한다. 막연한 실패보다 확인 대상과 보존한 요청이 보이는 편이 낫다.

나는 인증·계정 문제를 기능 오류와 섞지 않는 제작 기록을 남기고 싶었다. 작업이 멈췄다는 사실은 같아도 현재 페이지와 요청의 관계를 읽으면 필요한 다음 단계가 달라진다. 그 차이가 불필요한 재전송과 환경 변경을 줄이는 실제 사용성으로 이어진다.