에이전트가 내부적으로 정확한 탭을 골라도 사람에게 그 이유가 보이지 않으면 실행이 불안하다. 여러 계정과 참고 탭을 함께 쓰는 업무일수록 대상과 참고가 섞이기 쉽다. 북극성에서는 작성 대상·계정·참고를 따로 표시해 실행 전에 사람이 읽을 수 있는 문맥을 만들었다.
예상 대상과 실제 기록의 시점을 나눈다
TaskContext는 아직 실행 전이면 planTaskTabs로 현재 목표와 탭·프로젝트·계정에서 preview를 만든다. 실행 중 저장된 routing이 있으면 그것을 사용하고 기록 모드에서도 저장된 문맥을 읽는다. 현재 화면에서 다시 계산한 예상을 과거 실행의 실제 대상으로 보여 주지 않는다.
이 시점 구분이 없으면 실행 뒤 탭을 바꾼 사용자가 과거 작업도 새 탭을 대상으로 했다고 오해할 수 있다. 미리보기와 기록은 같은 카드 모양이어도 다른 자료다. 나는 결과 기록에 무엇이 그때 선택됐는지 남기고, 새 요청에는 지금 무엇을 선택할지를 따로 보여 주는 편이 낫다고 봤다. 예측과 과거 사실의 역할을 화면에서 분리한 것이다.
작성 대상과 참고는 다른 자리를 갖는다
대상은 별도의 작성 대상 행에 놓고 참고는 개수와 첫 탭을 요약한 details에 둔다. 참고가 없으면 지정 없음이라고 쓴다. 더 많은 목적지가 있으면 추가 작업 위치 안내를 남긴다. 읽어 볼 탭이 많다는 이유로 모두 작성 대상으로 보이게 하지 않는다.
탭 버튼은 실제 목록에 해당 ID가 있는지 확인하고 없으면 비활성화한다. 과거 기록을 눌렀다고 같은 제목의 새 탭을 임의로 선택하는 표시가 아니다. 버튼 제목에는 주소가 들어가더라도 실행 소유권은 별도 호스트 계약이 맡는다. 카드가 정확한 대상을 설명하는 일과 그 대상을 조작할 권한을 주는 일은 나눠야 했다.
계정을 골랐다는 표시는 로그인 증명이 아니다
계정 행은 accountLabel과 accountStatus를 함께 보여 준다. 과거 작업실 문서의 체크 표시는 현재 선택이며, 실제 화면에서 확인한 경우에만 로그인 확인이라고 한다. 저장된 이름만 있는 경우와 로그인 필요 화면을 다른 상태로 남긴다.
현재 AccountStatus도 선택된 탭의 프로필과 해당 플랫폼의 상태를 찾아 표시한다. 미지정 빈 로그인과 시크릿도 별도다. 같은 로고나 저장 이름만 보고 서버 인증을 확정하지 않는 표현이다. 고객에게 계정을 읽기 쉽게 보여 주려면 예쁜 이름보다 어떤 근거로 그 상태를 표시하는지가 더 중요했다. 실제 계정 신원은 공개 제작기와 공유 예제에 넣지 않는다.
모호함은 읽을 수 있는 결과로 보여 준다
routing.reason이 ambiguous이면 목적지 대신 확인 필요를 표시하고 note를 남긴다. 그럴듯한 계정 하나를 강한 글씨로 보여 주면 이미 결정된 것으로 받아들이기 쉽다. 아직 정하지 못한 사실을 시각적으로 보존하는 것이 중요했다.
이 카드는 추정 알고리즘의 모든 오류를 해결하는 기능은 아니다. 잘못된 현재 자료와 오래된 탭, 사이트 계정 변화는 실행 경계에서 다시 확인해야 한다. 미리보기에서 혼동을 줄이고 호스트에서 소유권을 검사하는 일이 함께 있다. 사용자가 읽는 문맥은 편의이며 검증의 대체물이 아니다. 그 한계를 숨기지 않아야 확인 필요라는 문구도 실제 다음 행동과 이어진다.
다른 대화에서도 이어 쓸 수 있는 문맥을 남긴다
고급 폼에도 현재 프로젝트와 로그인 프로필, 기능별 기본 동작 안내가 있다. 같은 프로그램 ID를 알더라도 어느 프로젝트와 이번 입력을 사용할지는 현재 문맥으로 결정한다. 사용자가 내부 식별자를 외우기보다 읽을 수 있는 이름과 상태를 확인하도록 했다.
이번에는 표시 코드와 기존 기록을 읽었고 실제 계정을 전환하거나 새 탭을 만들지 않았다. 공유 상태 문구 모듈은 선언된 합성 상태만 다룬다. 내가 남기고 싶은 노하우는 대상 선택의 내부 정답만이 아니라 사람이 그 선택을 검토할 수 있는 표현이다. 화면 앞의 사람과 실행하는 에이전트가 같은 대상을 이야기하고 있다는 근거를 남겨야 위임이 편해진다.