파일 선택 도구가 verified라고 답하면 업로드도 끝난 것처럼 읽기 쉽다. 하지만 브라우저가 파일을 받았다는 것과 서버가 처리해 원고에 넣었다는 것은 다르다. 북극성에서는 그 간격을 한 번의 성공으로 덮지 않고 선택 증표와 기다릴 결과를 나누어 다뤘다.

선택 성공의 문구부터 범위를 좁혔다

TaskFiles.upload는 선택한 파일의 이름과 크기가 실제 FileList 증거와 같은지 비교한다. 반환의 note는 파일 선택 확인이며 서버 전송 완료는 페이지 결과로 확인하라고 설명한다. verified가 붙어도 이 증표가 말하는 사건은 native 선택이다. 업로더의 진행률이나 저장된 문서까지 한꺼번에 확인한 결과가 아니다.

broker도 verified 선택에 대해서만 fileIds와 tab·documentEpoch의 선택 기록을 남긴다. 이 기록은 어떤 문서에서 무엇을 선택했는지 연결하는 데 쓰인다. 같은 필드 이름을 쓴다고 모든 도구의 verified가 같은 업무 완료를 뜻하지 않는다. 나는 응답을 짧게 만들면서도 무엇을 확인했는지 문구에 남겼다.

비워진 FileList를 성공으로 추측하지 않는다

일부 업로더는 파일 목록을 복사한 직후 input을 비운다. 나중에 읽은 FileList가 비어 있으면 선택이 안 된 것처럼 보일 수 있다. 드라이버는 같은 프레임의 실제 파일 선택을 연결하고 page handler 전에 신뢰한 input·change 이벤트에서 이름과 크기를 붙잡는 보조 증거를 둔다.

현재 FileList가 있으면 그것을 읽고 비어 있으면 잡아 둔 선택 증거를 본다. 빈 배열 자체를 성공으로 해석하지 않는다. 원래 파일 바이트가 서버에 도착했다는 보장도 여기에는 없다. 선택 과정의 관찰 누락 때문에 파일을 또 보내는 일을 줄이기 위한 한정된 구현이다.

업로드 완료는 해당 업로더의 상태로 기다린다

영상 대기는 제목 입력란이 속한 프레임의 문구를 우선 읽는다. 다른 프레임에 업로드 완료라는 글자가 있어도 그 영상의 완료로 쓰지 않는다. 업로드 진행 중 문구가 없고 완료가 관찰되며 필요한 입력란과 완료 버튼이 유일해야 다음 단계로 간다. 버튼이 활성화돼 보인다는 이유만으로 삽입하지 않는다.

실패 문구와 시간 초과도 구분한다. 늦어진 결과를 기다리는 제한이 끝나면 이미 선택한 파일의 기존 결과를 확인하도록 오류를 남긴다. 새 선택이 더 빠를 수 있다는 이유로 불확실한 업로드를 다시 보내지 않는다. 진행 상태를 읽는 일과 외부 효과를 추가하는 일을 갈라 둔 것이다.

삽입 완료는 다음 요소와 앞부분을 함께 본다

편집기에는 확인한 prefix보다 정확히 한 요소가 더 있어야 한다. 그 다음 요소의 유형과 ID, 준비 상태를 확인하고 전체 예상 구성도 matches로 대조한다. 이 조건을 통과해야 pending을 확인된 blocks로 옮겨 저장한다. 영상 업로더에서 완료를 눌렀다는 사실만으로 원고에 들어갔다고 기록하지 않는다.

새 요소가 보여도 앞 문단이 바뀌었거나 다른 유형이 들어갔다면 멈춘다. 사용자가 중간에 편집했을 수 있기 때문이다. 실제 서버 문서를 다시 여는 확인은 그 다음의 별도 책임이다. native 선택·업로더·편집기·서버를 단계로 나누면 어디까지 확인했는지 잃지 않을 수 있다.

불확실한 선택과 확인된 선택의 재개가 다르다

매체를 보내기 전에 pending을 저장하고 선택 호출이 정상 반환한 뒤 selected=True를 남긴다. 전달 전에 거절됐다는 증거가 있는 오류는 pending을 지울 수 있지만 결과가 불확실하면 그대로 보존한다. selected가 확인되지 않은 재개에서는 파일을 다시 전송하지 않고 ARTICLE_UPLOAD_OUTCOME_UNKNOWN으로 멈춘다.

반대로 selected가 있고 결과만 늦으면 읽기 확인으로 다음 요소를 채택할 수 있다. 기존 시험은 재개 뒤 업로드 횟수가 여전히1인지 본다. 이 콘텐츠 작업에서 원래 업로더를 새로 돌린 것은 아니다. 시험 코드와 실제 상태 전이를 읽고 재전송을 막는 조건을 설명했다.

합성 비교기에는 실제 서버 성공을 넣지 않았다

공유 모듈은 ready=False와 순서·바이트 차이를 합성 관찰로 비교한다. 모든 값이 맞아도 publication_verified=False를 돌려준다. 임의로 전달된 관찰이기 때문에 실제 native 선택 증표나 서비스 저장을 인증하지 않는다. 이 제한을 숨기면 작은 테스트가 원격 업로드 성공처럼 보일 수 있다.

운영에 연결할 때도 성공 하나보다 단계별 결과가 필요하다. 선택했는지, 처리가 끝났는지, 원고에 들어갔는지, 다시 연 문서에도 남는지를 각각 읽을 수 있어야 한다. 나는 기다리는 시간이 생겨도 현재까지 확인된 사실을 잃지 않는 프로그램이 에이전트에게도 다루기 쉬운 프로그램이라고 보았다.